1
0
Fork 0
Commit graph

200 commits

Author SHA1 Message Date
6c71e003c9 feat(config): Update payload config, notifications, and migrations
Update Payload configuration:
- Import AssignmentTransfers collection in src/payload.config.ts

Update notification system:
- src/lib/notifications/index.ts: Add transfer notification types
- Update notification helper to support new notification types

Update migrations index:
- src/migrations/index.ts: Register new assignment transfer migrations

These changes integrate the AssignmentTransfers collection into the
existing Payload configuration and notification infrastructure.
2026-08-31 23:40:41 -04:00
6fb8dee3f6 feat(frontend): Add assignment transfer UI components
Add React components for assignment transfer user interface:

1. AssignmentCard.tsx: Display user's current assignment with transfer button.
   Shows assignment details, current status, and allows initiating transfer requests.

2. RequestTransferDialog.tsx: Modal dialog for creating transfer requests.
   - Selects target assignment from assignment list
   - Optionally notes required for transfer
   - Submits request to AssignmentTransfers collection
   - Emits AssignmentTransferRequest event

3. Transfers page (src/app/(frontend)/transfers/): Transfer request list view.
   - Requests card showing pending requests with requestor, target, current
   - Approval cards for assignment leaders
   - Appeal cards for rejected requests
   - Completed/Cancelled status display

All components use shadcn/ui primitives, proper loading states, error handling,
and provide accessible keyboard navigation.
2026-08-31 23:40:37 -04:00
24c5259056 feat(awards): add awards listing page, grant permissions, and profile ribbon rack integration 2026-08-31 12:27:20 -04:00
e3e8b69a54 feat(ui): add ClientDate component for timezone-aware date rendering 2026-08-31 12:27:17 -04:00
66181ff51c feat(assignments): add AssignmentMembersField component for managing assignment members 2026-08-29 23:53:13 -04:00
a0c9fe9e8e fix(eodArena): simplify sidebar handling for mobile in landscape orientation 2026-08-29 17:13:45 -04:00
6d9b0ed8d8 fix(minesweeper): prevent default context menu on right-click for game board 2026-08-28 20:04:15 -04:00
18e48243b3 style(commendation): update commendation card styles for improved layout 2026-08-28 19:18:22 -04:00
3faa01353d feat(sounds): integrate sound effects for game actions in Minesweeper 2026-08-28 18:33:15 -04:00
b9999fceff Merge branch 'feat/tarkov-locker-ui'
# Conflicts:
#	TODO.md
#	src/components/frontend/eod/MinesweeperBoard.tsx
#	src/migrations/index.ts
2026-08-28 18:26:00 -04:00
4ba545b77b feat(responsive): enhance Minesweeper mobile experience with viewport adjustments and sidebar behavior 2026-08-28 18:20:04 -04:00
1f2f7b6269 feat(preferences): add background texture toggle 2026-08-28 01:20:12 -04:00
a6b06569da feat(locker): refine inventory workspace 2026-08-28 01:19:48 -04:00
ab86be05ae feat(awards): add commendation color field and update award sorting 2026-08-28 00:54:25 -04:00
d94da34af2 feat(intelligence): add mission feedback reminders 2026-08-28 00:20:41 -04:00
c2a16120cc feat(auth): handle expiring sessions in frontend 2026-08-28 00:20:35 -04:00
7ca8cd8551 feat(version): expose build metadata
Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent)

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
2026-08-27 18:36:11 -04:00
d518b13f36 feat(xp): show experience descriptions
Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent)

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
2026-08-27 18:36:11 -04:00
b8ba036965 feat(profile): add leadership evaluation controls
Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent)

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
2026-08-27 18:36:04 -04:00
d740d43800 feat(eod): update difficulty selection in EOD components and bump version to 0.2.0 2026-08-26 23:55:03 -04:00
7a34c3901e feat(eod): add best times tracking for training, perimeter, and supply road games 2026-08-26 23:24:24 -04:00
a247e61fa9 feat(eod): add high-contrast toggle, improved leaderboard, new effects on bad-flag cells 2026-08-26 22:36:06 -04:00
512cdd62ad feat(eod): add minesweeper clearance game 2026-08-26 22:04:48 -04:00
83f203d736 feat(shims): add targeted client-side injections 2026-08-26 00:53:31 -04:00
0771424446 feat(campaigns): let members create and own campaigns 2026-08-26 00:53:17 -04:00
41b9d62e15 feat(sidebar): add sparkle accent to mini XP display
Show a sparkle icon next to the XP number in the collapsed sidebar
XP strip; inline the level-name/XP spans per prettier.
2026-08-25 12:31:54 -04:00
3348466f3b fix(roster): tighten tab icon spacing and allow org chart scroll
Add gap-1.5 to the roster tab triggers so icons and labels are not
glued together, and let the org chart tab scroll horizontally instead
of overflowing the page.
2026-08-25 12:31:53 -04:00
824b03ec49 feat(missions): add redacted objective toggle
Mission objectives gain a redacted checkbox. Redacted objectives are
shown block-redacted to players; mission managers, authors, and Zeus
see the real text (via tooltip) and can toggle the flag from the
mission detail page. Toggles emit mission:objective-redacted-toggle
events. Also registers the mission:auto-complete event type used by
the upcoming mission-tick bin.
2026-08-25 12:27:52 -04:00
98f2b0447a fix(awards): tighten ribbon rack sizing and hover effect
Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent)

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
2026-08-23 18:52:36 -04:00
38400366a1 feat(sidebar): regroup commerce nav and add XP mini toggle
Move Banking and Market out of Logistics into a commerce group beside Personal, and add a quick XP mini-mode toggle synced to the saved display preference via the layout-provided preferences prop.

Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent)

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
2026-08-23 18:52:18 -04:00
906af4feb1 feat(preferences): expose XP mini-mode toggle in account settings
Add the mini XP display switch to PreferencesForm, wire it through the account page, and cover it in the integration test.

Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent)

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
2026-08-23 18:52:09 -04:00
432929cc29 feat(awards): finish award profile presentation 2026-08-21 15:40:33 -04:00
e1014207f4 fix(version-overlay): remove redundant check for commit info display 2026-08-21 12:47:54 -04:00
b060b967c0 feat(awards): add AwardCard and RibbonRack components for award display 2026-08-21 12:46:44 -04:00
dcc58327e3 feat(impersonation): implement user impersonation functionality and UI 2026-08-21 01:41:14 -04:00
643e282fe7 feat(flappy): keep current pilot visible on leaderboard 2026-08-21 00:26:52 -04:00
f69c7ca0b4 feat(ui): show rank in dashboard navigation 2026-08-21 00:26:47 -04:00
6d58451978 feat(projects): enforce permissions and improve search 2026-08-21 00:26:33 -04:00
282ca9eddf feat(xp): animate sidebar gains 2026-08-21 00:25:33 -04:00
485e26bbda feat(realtime): publish user-scoped update events 2026-08-21 00:25:20 -04:00
1a86a3a8b5 feat(realtime): add channel presence 2026-08-20 19:57:01 -04:00
3f4403d151 feat(intelligence): refresh mission presentation 2026-08-20 19:56:41 -04:00
9bf984fc96 feat(projects): add project tracking workspace 2026-08-20 19:55:33 -04:00
a9d9ba50ea feat(preferences): add version overlay toggle and redesign settings UI
Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent)

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
2026-08-19 20:40:56 -04:00
d57b0cbc22 feat(ui): add shadcn switch and radio-group components
Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent)

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
2026-08-19 20:40:46 -04:00
a8e147e52a docs: add AGENTS.md subdirectories and login case study
Add domain-specific AGENTS.md files for collections, components, lib,
utils, and bot. Add login-return-url case study documenting the
return-URL flow design decisions and debugging lessons learned.
2026-08-19 19:48:35 -04:00
1f9f919443 feat(auth): add return-URL flow for login redirects
Add LoginLink client component that captures current path via usePathname()
and passes it as returnTo query param. Update login page to read and
sanitize returnTo (open-redirect guard: must start with /, reject //).
Update LoginForm to redirect to returnTo after successful login. Wire
LandingPage CTA through LoginLink. Add returnTo redirect for already-
authed users hitting /login. Add return-URL to flappy page redirect.
Remove trailing blank line from (frontend) layout.
2026-08-19 19:48:24 -04:00
4c3c3373d3 feat(roster): implement leadOrActual display preference
- Fetch current user's leadOrActual preference in roster page via payload.auth()
- Add RosterDisplayContext to avoid prop drilling through org chart components
- MemberCard shows 'Lead' or 'Actual' based on user preference
- Add preference radio buttons to PreferencesForm under Display section
- Update updatePreferences server action to save leadOrActual
- Add TODO for restyling radio buttons later
2026-08-18 02:20:58 -04:00
cb2029ea97 feat(command-palette): register page-specific commands across UI
Wire CommandPalette/Provider into the frontend layout and add Cmd+K
hint in the SiteHeader. Register context-aware commands for banking,
helpdesk, mission RSVP, locker, shipments, and market pages.

Also removes the locker search's duplicate Cmd+K listener (now handled
globally), renames its button to 'Search Locker', and cleans up a
flappy page parenthetical.
2026-08-18 02:05:36 -04:00
4906fc8008 refactor(ui): make dialogs controlled via open/onOpenChange props
Support external open state management so parent components and the
command palette can trigger these dialogs programmatically.
2026-08-18 02:05:20 -04:00
0fc61ebb47 feat(command-palette): add command palette with Cmd+K keyboard shortcuts 2026-08-18 02:05:00 -04:00
452aa392bd feat(ui): enhance shadcn dialog, tabs, tooltip, and command components
- Add showCloseButton prop to DialogContent for modal workflows
- Add line variant to TabsList via class-variance-authority
- Add arrowClassName prop to TooltipContent for arrow styling
- Add optional title prop to CommandDialog for accessibility
2026-08-17 22:18:31 -04:00
cdeebd05f8 style(static): format payload admin static components 2026-08-16 23:27:51 -04:00
5058d9ce6c style(admin): format admin narrative-flow and award components 2026-08-16 23:27:51 -04:00
a21564a78d style(frontend): format frontend feature components 2026-08-16 23:27:51 -04:00
05c7c83799 style(ui): format shadcn/ui primitives and utility hooks 2026-08-16 23:27:51 -04:00
088b6cefb6 fix(ui): correct sidebar inset layout and Tailwind v4 custom-property widths
The shadcn component update pulled sidebar.tsx using Tailwind v3-style
bare-bracket custom property syntax (w-[--sidebar-width]). Under Tailwind
v4 this compiles to invalid CSS (width: --sidebar-width) which the browser
ignores, so width fell back to auto and the fixed sidebar blew out to its
content's intrinsic width (the 1372px logo header ~ half the page). The
empty spacer div was equally broken, reserving zero space and leaving the
inset m-2 margin as a stray left gap.

Three fixes:
- sidebar.tsx: wrap all 7 bare-bracket custom properties in var() so they
  compile to width: var(--sidebar-width) / var(--sidebar-width-icon) /
  max-width: var(--skeleton-width). The calc(var(...)) rules were already
  valid; only the bare forms were broken.
- layout.tsx: replace the raw <main className="min-h-full bg-background
  w-full"> with <SidebarInset>. AppSidebar uses variant="inset", whose
  peer styling (md:peer-data-[variant=inset]:m-2 / :rounded-xl / :shadow)
  only applies to a SidebarInset sibling, so the inset gap/rounding/shadow
  were silently dropped.
- SiteHeader.tsx: replace the raw <div> + border-gray-800 + p-4 with the
  standard shadcn <header className="flex h-16 shrink-0 items-center gap-2
  border-b px-4"> using semantic border-b, plus -ml-1 on SidebarTrigger
  and an ml-auto wrapper for NotificationsBell (which takes no className).

Verified via the running dev server: SSR HTML carries
data-variant="inset", a single <main> with the peer-data-[variant=inset]
classes, <header ... border-b>, and zero border-gray-800 occurrences.
tsc --noEmit clean for the changed files.
2026-08-16 23:27:51 -04:00
8fe7276ba3 refactor(ui): update shad/cn components 2026-08-16 18:34:23 -04:00
dad652b1d4 feat(helpdesk): enhance create ticket dialog with critical alert for priority tickets 2026-08-16 18:26:01 -04:00
931c60e234 refactor(helpdesk): replace inline hint with Alert in create ticket dialog
Use the shadcn Alert component for the file-sharing hint instead of a bare Message element.

Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent)

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
2026-08-16 18:13:22 -04:00
5064890452 feat(helpdesk): add helpdesk sidebar entry
Add the Helpdesk nav item with LifeBuoy icon under the core nav group.

Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent)

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
2026-08-16 18:12:49 -04:00
c80ecf9141 feat(helpdesk): add helpdesk UI components
Add TicketsView, TicketCard, TicketDetail, TicketTimeline, CreateTicketDialog, and TicketBadges components.

Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent)

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
2026-08-16 18:12:44 -04:00
5694dbf218 feat(admin): add GoToFrontendLink to admin nav
Register a beforeNav component linking the Payload admin panel back to the public frontend.

Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent)

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
2026-08-13 17:00:51 -04:00
4a96c57546 style(frontend): swap ShieldIcon for AppLogo on landing page 2026-08-12 23:14:08 -04:00
4a2e0d5406 feat(banking): redesign banking overview with wallet hero, activity feed, and tabs 2026-08-12 23:13:27 -04:00
9210b7bbec feat(banking): add WalletHero and ActivityFeed components for banking overview 2026-08-12 23:13:11 -04:00
034f0af5f3 refactor(banking): extract shared UI constants for status styling and transaction colors 2026-08-12 23:12:57 -04:00
110112e9b4 feat(factions): redesign faction card and add faction detail page
Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent)

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
2026-08-12 16:21:13 -04:00
5f601e393d style(intelligence): reformat mission components and refine objective display
Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent)

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
2026-08-12 16:21:09 -04:00
11afd905f5 feat(campaigns): add cover image and mission stats to campaign cards
Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent)

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
2026-08-12 16:21:04 -04:00
f065aa6796 feat(missions): add RSVP attendance collection and detail UI 2026-08-12 12:38:53 -04:00
2984c72d77 fix(notifications): harden bell dropdown against failed mark-read 2026-08-12 12:38:48 -04:00
83879687ae feat(users): add discordId and Discord notification preferences 2026-08-12 12:38:43 -04:00
bbfbd5966c feat(version): expose build/commit metadata via /api/version and overlay 2026-08-12 12:38:33 -04:00
7f27b5e823 style(dashboard): polish quick stats and recent events feed
- Emphasize stat values and keep labels on one line
- Rework the recent events feed into a two-line layout with human-readable type labels and narrative highlighting
2026-08-11 23:25:44 -04:00
66816e2182 refactor(event-log): extract shared formatType helper and restyle ledger entries
- Move the event type formatter into its own util for reuse
- Reflow ledger rows into a stacked two-line layout with a type chip
2026-08-11 23:25:41 -04:00
9bf16980cc feat(roster): build org chart from explicit subassignment hierarchy
- Resolve parents via subAssignments instead of inferred member overlap
- Drop cyclic or dangling subassignment edges
- Render members only at their deepest unit; widen unit boxes and pluralize member counts
2026-08-11 23:25:38 -04:00
d4ff6ba1a1 feat(frontend): add account navigation, qualification-gated sidebar sections, and callsign display
- Add Account entry to the sidebar and user menu
- Hide Intelligence and Infrastructure sections unless the user is qualified
- Make the sidebar content area scrollable
- Support showing the callsign in the user menu via preferences
2026-08-11 23:25:33 -04:00
c81036bd82 feat(account): add self-service account page with profile, password, Discord request, and preferences
- Add /account page backed by server actions
- Allow editing display name, changing password, and requesting a Discord username change
- Add notification muting and callsign display preferences UI
- Add shadcn card component and account event types
2026-08-11 23:25:21 -04:00
b8cbb85dc8 feat(notifications): add notification inbox page and preference-aware muting
- Add /notifications inbox with mark-read and mark-all-read actions
- Respect mutedAll/mutedTypes preferences when creating notifications
- Add View all link and Discord request label to the notifications bell
2026-08-11 23:25:16 -04:00
89b8474e23 feat(market): add trading marketplace with listings, haggling, and NPC vendors
Tarkov-style flea market where users list locker items at a fixed price
and buyers pay through the banking system; items transfer directly
into the buyer's locker.

- market-listings + market-negotiations collections and the market page
  with search/rarity filters and a Countdown timer on each card
- service lib (buyListing with partial-quantity + negotiated-price
  support, clean-stock rule, creditLockerQuantity, auto pricing)
- negotiation flow: make/accept/reject/counter/withdraw, strictly-
  increasing buyer offers, NPC vendor auto-resolution
- NPC vendors: game-npcs attribution, patience meter, dialogue, chat
  bubbles, historical threads dialog
- 30d user / 7d auto listing durations, market-tick bin for expiry +
  vendor restock, SSE notify on tick
- market event types + game-npcs/market target collections in the
  event log; sidebar Market entry under Logistics
- partial-quantity purchases (buyListing/buyMarketListing/makeMarketOffer)
  with full int test coverage (25 tests)
2026-08-10 16:05:57 -04:00
9c15117b9b feat(notifications): add in-app player notification center
- user-notifications collection (per-user inbox, owner-scoped read)
- notifyUser() fire-and-forget helper + notification label mapping
- NotificationsBell in the site header with 30s polling, unread badge,
  mark-read on click, and "Mark all read"
- markNotificationsRead / markAllNotificationsRead server actions
2026-08-10 16:02:55 -04:00
6b94686de4 style(dashboard): drop obsolete text-shadow utilities
Remove the text-shadow-orange classes from the WIP alert now that the
dark theme renders the title/description legibly without them.
2026-08-10 16:01:56 -04:00
0b6e00b99c chore(ui): add shadcn badge, checkbox, sonner toaster, and useNow hook
- badge, checkbox, sonner shadcn primitives
- useNow hook for client-side now() with re-render
- mount <Toaster /> in the frontend root layout
2026-08-10 16:01:43 -04:00
fc27f11ab8 fix(locker): revert to onClick and add error feedback to slot picker
- Revert onPointerDown back to onClick for item selection
- Add error state to display server action failures to user
- Add pending state to disable buttons during submission
- Update onPick to return ActionResult for error handling
2026-08-02 19:00:05 -04:00
bf6b29690f fix(locker): use onPointerDown for slot picker item selection
- Change onClick to onPointerDown with preventDefault on item buttons
- Also update Cancel and Clear Slot buttons for consistency
- Fixes item selection not working inside the dialog
2026-08-02 18:58:28 -04:00
11e9bfef24 fix(locker): use onPointerDown for wardrobe slot clicks
- Change onClick to onPointerDown with preventDefault
- Prevents Tooltip from intercepting the click event
- Slot picker dialog now opens reliably when clicking hotspots
2026-08-02 18:56:57 -04:00
58b70fc154 fix(locker): match tooltip arrow color to dark popover background
- Add arrowClassName prop to TooltipContent component
- Pass bg-popover fill-popover to wardrobe tooltip arrow
- Arrow now matches the dark tooltip body instead of being white
2026-08-02 18:54:42 -04:00
775b61e1f4 style(locker): increase wardrobe tooltip text size and use dark theme
- Change tooltip background from bg-foreground to bg-popover (dark)
- Increase text size from text-xs to text-sm
- Add border border-border for subtle definition
- Use font-semibold for slot name label
2026-08-02 18:53:47 -04:00
be8e537385 feat(locker): add hover tooltip to wardrobe slot hotspots
- Wrap each wardrobe slot button with shadcn Tooltip component
- Show slot name and current item name on hover
- Use smooth fade-in/zoom-in animation from shadcn tooltip
- Position tooltip to the right of each hotspot with 8px offset
2026-08-02 18:52:45 -04:00
4ae2b3137c feat(locker): add drag-drop attachment in grid
- Add attachItemFromGrid server action for drag-drop attachment
- Add attach drop detection in LockerGrid handleDragEnd
- Add attach drop styling with amber highlight on weapon footprint
- Add isAttachDrop prop to GridCell for attach-specific feedback
- Add dragError state with 5s auto-clear for attach failures
- Reuse setItemAttachment/removeItemAttachment semantics
- Handle slot replacement with no-room fallback for old attachments
2026-08-02 18:50:19 -04:00
a466ed54ed feat(locker): add command palette search
- Add LockerSearch component with Search button and ⌘K shortcut
- Add search.ts with buildSearchEntries, buildAssetStats, resolveAssetRef
- Add command.tsx shadcn component (cmdk dependency)
- Group search results by asset type with quantities and location chips
- Show stats: slot, capacity, ammo, weight, NVG generation, rarity
- Support navigation: weapon → customize, attachment → parent customize
- Add locker-search-highlight animation for 3s amber pulse feedback
- Add cmdk@^1.1.1 dependency
2026-08-02 18:50:07 -04:00
6e717684fb feat(locker): add equipment editor and wardrobe tab
- Add EquipmentEditorDialog for per-category attachments, skins, and custom names
- Add Wardrobe component with soldier image and clickable equipment slots
- Add WardrobePanel with loadout selector and current equipment display
- Add WardrobeSlotPicker dialog for equipping items from locker
- Add equip/unequip loadout functionality with equipped badge
- Add equipment schema to LockerStorages (attachments, skin, customName)
- Add wardrobe slot layout with hotspot positions for each equipment type
- Add locker:item-attach, locker:item-detach, locker:item-skin event types
- Update LoadoutCard to show equipped status and equipment list
- Update LoadoutsPanel to pass ownedItems for equipment display
2026-08-02 18:49:59 -04:00
6b2778751b refactor(flappy): use obstacle terminology instead of pipes 2026-08-02 14:32:53 -04:00
e5f544f103 feat(flappy): rework obstacles as lit buildings with day-night cycle 2026-08-02 14:32:51 -04:00
126d5b6dae feat(locker): add personal locker page and UI 2026-08-02 14:32:49 -04:00
9d990d2965 feat(flappy): rebrand references to "definitely not Flappy Bird" 2026-08-02 12:56:41 -04:00
f81b7ecce6 feat(flappy): add top-10 leaderboard beneath the game 2026-08-02 12:56:26 -04:00
d754b2954a feat(flappy): add flight simulator minigame with per-run XP rewards 2026-08-02 12:55:54 -04:00
898c09e302 feat(banking): add banking overview and account detail UI 2026-08-02 04:10:40 -04:00