1
0
Fork 0
Commit graph

311 commits

Author SHA1 Message Date
2e1fbf8006 feat(awards): support bulk recipient selection in award grant flow
Refactors grantAward to accept an array of recipientUserIds, adds
duplicate-award and eligibility checks per recipient, and returns a
per-recipient result summary. GrantAwardDialog gains a third step
showing grant results when some recipients fail. RecipientPicker is
rewritten to support multi-select with chip-based selected state and
a maxSelections cap.
2026-09-02 16:14:07 -04:00
d952a33ee7 feat(awards): render backgroundImage as faded backdrop on medal cards 2026-09-02 16:14:03 -04:00
ab5af479c7 feat(helpdesk): add ticket edit and vote controls
Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent)

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
2026-09-01 17:48:52 -04:00
32a8dfa89e feat(helpdesk): add ticket card and detail controls
Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent)

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
2026-09-01 17:48:48 -04:00
f1ff0436dd fix(locker): keep inventory workspace visible
Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent)

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
2026-09-01 17:18:08 -04:00
cba1475b33 fix(banking): add account tab spacing
Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent)

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
2026-09-01 17:18:04 -04:00
39e13da41b feat(impersonation): open user picker from account menu
Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent)

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
2026-09-01 17:17:57 -04:00
7624327ab9 refactor(impersonation): replace page control with modal
Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent)

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
2026-09-01 17:17:54 -04:00
3d8655aa8a fix(notifications): add per-row mark as read
Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent)

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
2026-09-01 17:17:41 -04:00
de556ba370 feat(sidebar): Remove duplicate transfers entry from sidebar navigation 2026-09-01 02:19:57 -04:00
76e948fd59 feat: Add remaining transfer components and utilities
Add transfer workflow components and utilities:

1. Transfer types and core functions (src/lib/transfers/index.ts):
   - Type-safe transfer request and decision creation
   - Appeal, cancel, and resolve core functions
   - Server action conventions with error handling

2. Transfer UI components (src/components/frontend/transfers/):
   - TransferActionDialog.tsx: Handle approval/rejection appeals
   - TransferApprovalCard.tsx: Display approval decisions
   - TransferNoteDialog.tsx: Add notes for transfers/appeals
   - TransferRequestCard.tsx: Show transfer request details
   - TransferResolutionCard.tsx: Display superuser resolutions
   - TransfersView.tsx: Main transfers list page
   - transferTypes.ts: Shared TypeScript types

3. Notification types (src/lib/transfers/notificationTypes.ts):
   - Define notification type constants for transfer events
   - Include TRANSFER_NOTIFICATION_TYPES for bridge filtering

4. Integration tests (tests/int/):
   - transfer-requests.int.spec.ts: Test bot request polling
   - transfer-bot-delivery.int.spec.ts: Test Discord notification delivery

These components and utilities complete the transfer workflow
implementation including approvals, appeals, and delivery.
2026-08-31 23:41:29 -04:00
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
83d5b85247 feat(sidebar): enhance sidebar navigation and improve org chart styling 2026-08-02 03:14:30 -04:00
d583fe6de6 feat(logistics): add shipment action controls to shipment detail page 2026-08-02 02:04:51 -04:00
6cce6116b8 refactor(sidebar): use next/link for client-side navigation 2026-08-02 02:04:12 -04:00
01f4820f2e feat(logistics): enforce structure storage rules on deposits, transfers, and shipments 2026-08-02 02:04:07 -04:00
a9af0b5246 feat(auth): add frontend login page and guest landing gate 2026-08-02 02:04:02 -04:00
d3afc6a0c1 feat(realtime): add game-tick SSE notification pipeline 2026-08-02 02:03:56 -04:00
75a1c8ed9a feat(logistics): add shipments collection with dispatch, transit, and arrival processing 2026-08-02 02:03:50 -04:00
827a36e901 fix: update grid cell and item component styling
- Increase grid cell border opacity from 30% to 60% for better visibility
- Change item alignment from items-center to items-start for better layout
2026-07-31 20:04:44 -04:00
9c89831f20 refactor: update sidebar navigation with new sections
- Add Intelligence section with Campaigns, Missions, and Factions links
- Add Roster link to main navigation
- Update Logistics section with Resources and Vehicles links
- Update XPDisplay prop from xp to xpLevel for level resolution
- Remove commented-out navigation items
2026-07-31 20:04:28 -04:00
f9c33c3fb9 feat: add award ribbon and medal designers
- Add RibbonDesigner admin component for visual ribbon design
- Add MedalDesigner admin component for visual medal design
- Add ribbonDesign and medalDesign JSON fields to Awards collection
- Conditionally show design fields based on award type
2026-07-31 20:03:19 -04:00
f16b76a198 feat: add profile page with service record
- Add profile page at /profile/[username] showing user service record
- Update NavUser dropdown to link to Service Record instead of Upgrade to Pro
- Remove unused Billing menu item from user dropdown
2026-07-31 20:03:03 -04:00
f645eb16e5 feat: add roster page with member management
- Add roster page displaying unit members with rank and assignment info
- Add RosterView component with sortable member table
2026-07-31 20:02:43 -04:00
3797cbcc03 feat: add logistics pages for resources and vehicles
- Add resources list page with resource cards and detail pages
- Add vehicles list page with vehicle cards, filters, and detail pages
- Add ResourceCard, VehicleCard, and VehicleFilters components
- Widen structure detail page max-width from 4xl to 7xl
2026-07-31 20:02:25 -04:00
28a148c06f feat: add intelligence section with campaigns, missions, and factions
- Add campaigns list page with campaign cards
- Add missions list page with filtering and mission cards
- Add factions list page with faction cards
- Add mission detail components: briefing, comms, factions, logistics, objectives, roles
- Add MissionFilters for status and type filtering
2026-07-31 20:02:07 -04:00
25c088aebf feat: add operations dashboard with mission briefing and stats
- Redesign homepage as authenticated operations dashboard
- Add ProfileSummary, MissionBriefing, RecentEvents, QuickStats components
- Add UpcomingMissions and ActiveCampaigns sidebar widgets
- Redirect /dashboard to / (homepage is now the dashboard)
- Show welcome screen with login link for unauthenticated users
2026-07-31 20:01:50 -04:00
98e171d088 feat: add XP level system with resolveLevel utility
- Add resolveLevel utility to compute level name, progress, and XP thresholds
- Add seedExperience script for populating experience levels
- Update XPDisplay to show level name, progress bar, and percentage to next level
- Update layout to fetch experience levels and pass resolved XP data to sidebar
2026-07-31 20:01:23 -04:00
2ffd5e2a84 refactor: LiteGraph-style node layout with NodeShell wrapper
- NodeShell component wraps all nodes with handle rendering + px-8 content padding
- Handles positioned at node edges with labels outside (no overlap with content)
- Labels: 9px mono font, full opacity, color-matched to socket type
- Removed old TypedHandle + NodeHandles (replaced by NodeShell internals)
- All 18 node components updated to use NodeShell
- Format node dynamically generates handles from template {0}, {1}, etc.
2026-07-28 18:26:13 -04:00
707562faaa fix: restore small handle labels and make Format node dynamic
- TypedHandle now shows tiny 8px labels next to handles (color-matched)
- Labels positioned outside the handle, no overlap with node content
- Format node dynamically generates input handles from template {0}, {1}, etc.
- NodeHandles accepts dynamicInputs/dynamicOutputs overrides
- isValidConnection treats dynamic handles (arg-*, option-*) as any-type
2026-07-28 18:22:25 -04:00
8ec0c194ff fix: reduce handle size and remove overlapping labels
- Flow handles: 12px → 8px (rounded square)
- Data handles: 10px → 6px (circle)
- Border: 2px → 1.5px with softer opacity
- Removed label text from handles (color indicates type)
- Removed wrapper div — handles render directly via React Flow
2026-07-28 18:19:06 -04:00
06fb1ede75 feat: new blueprint node types for data flow and logic
New node types:
- GameData: reads runtime state (structure health, deliveries, resources, etc.)
- Flag: read/write persistent flags by name
- Compare: A [op] B → boolean (>, <, ==, !=, >=, <=)
- Math: A [op] B → number (+, -, *, /)
- Format: template string with {0}, {1} placeholders → string
- Logic: A [op] B → boolean (AND, OR, XOR)
- NOT: boolean → inverted boolean
- Branch: flow in + boolean condition → true/false flow out
- Sequence: flow in → 3 flow outs (executes in order)

Toolbar updated with categorized buttons (Story, Data, Logic).
MiniMap color-coded for all 18 node types.
NodeEditDialog handles all new types with operator/field selectors.
2026-07-28 18:16:20 -04:00
9a7462e5f7 feat: typed socket foundation for LiteGraph-style blueprint editor
Phase 1 — Typed Socket Foundation:
- SocketType enum: flow, number, string, boolean, any
- Socket definitions for all 9 existing node types (inputs + outputs)
- TypedHandle component: color-coded circles (flow=white square, number=purple, string=teal, boolean=green, any=indigo)
- NodeHandles helper: auto-renders handles from socket config with proportional spacing
- isValidConnection: rejects type mismatches, any-type sockets accept all connections
- All existing nodes refactored to use NodeHandles instead of manual Handle components
2026-07-28 18:11:52 -04:00
cfba38ca24 refactor: switch all node types to left/right handles for L-to-R layout
- Updated handle positions:
  - Target: Position.Left (incoming edges from left)
  - Source: Position.Right (outgoing edges to right)
- Updated MiniMap nodeColor to color-code all 9 node types
- Maintains consistency across narrative, primitive, and control nodes
2026-07-28 17:49:48 -04:00
4a573f7cfc feat: add Wait and primitive node types to NarrativeFlowEditor
- New node types:
  - Wait: delays execution for N ticks, supports optional input
  - Number: stores a numeric value
  - String: stores a string value
  - Random: generates random numbers in range [min, max]
  - Boolean: stores true/false flag
  - Date: stores a date value
- Color-coded nodes matching React Flow palette:
  - Wait: yellow
  - Number: purple
  - String: teal
  - Random: pink
  - Boolean: emerald
  - Date: cyan
- NodeEditDialog now handles all new types with appropriate fields
- Toolbar updated with color-matched buttons
2026-07-28 17:44:46 -04:00
9651ad83ae fix: use span for close button to ensure true transparency
- Browser button elements have default background/border
- Span with onClick provides the same functionality with no defaults
- Maintains keyboard focus states and accessibility
2026-07-28 17:33:20 -04:00
fbaad2e4bb fix: close button is now transparent with solid X icon
- No padding, no border, no background on button
- X icon itself has text-zinc-500 color
- Only hover background tint on the button
2026-07-28 17:30:40 -04:00
8ddca4d647 refactor: simplify close button to transparent X icon only 2026-07-28 17:29:38 -04:00
56980eebd3 fix: add dark mode utility classes to NodeEditDialog inputs and buttons
- Add dark:bg-zinc-800 dark:border-zinc-700 dark:text-zinc-100 to all Inputs/Textareas
- Add dark:bg-blue-600 dark:hover:bg-blue-700 dark:text-white to Save button
- Add dark:border-zinc-700 dark:text-zinc-300 to Cancel, Add buttons
- Add dark:bg-red-900/60 dark:hover:bg-red-800/80 to destructive icon buttons
- Ensures dialog renders correctly inside Payload admin portal context
2026-07-28 17:23:10 -04:00
fe863845bb refactor: use shadcn components in NodeEditDialog, add Textarea component
- Replace raw <textarea> with shadcn Textarea component
- Replace raw <button> with shadcn Button (variant='destructive' + icon)
- Remove custom className overrides fighting admin dark theme
- Add shadcn preference rule to AGENTS.md
2026-07-28 16:28:14 -04:00
103340271b feat: narrative events flowchart editor with React Flow
- NarrativeEvents collection redesigned with flowData JSON (React Flow format)
- Custom admin field component: NarrativeFlowEditor with @xyflow/react
- Three node types: NarrativeBeat (blue), Choice (amber), Outcome (emerald)
- NodeEditDialog with type-specific forms replacing prompt() editing
- Right-click context menu (Delete node/edge with Radix primitives)
- Dynamic handles on Choice nodes (one per option)
- Dark-themed canvas with MiniMap, Controls, and animated edges
- All changes sync bidirectionally with Payload form state
- AGENTS.md updated with architecture docs
2026-07-28 16:26:57 -04:00
dfbe0cb6c5 feat: add EventLedger UI component with live updates and filtering
- Client-side EventLedger component that queries game-event-logs REST API
  for a given structureId and renders a scrollable feed
- Actor name prefix with 'You' substitution for the current user, messages
  lowercased to fit sentence syntax
- Multi-select dropdown filter (shadcn DropdownMenuCheckboxItem) for event
  types with PascalCase formatting
- Narrative/GM events (system: false) styled with amber accent + book icon
- Smart refresh: smooth re-fetch without clearing existing entries, 30s
  polling interval, and instant refreshKey trigger from parent actions
2026-07-28 16:08:13 -04:00
59769076ff feat: add GameEventLogs collection and event emission infrastructure
- New game-event-logs collection with timestamp, type, message, actor,
  structure, targetCollection/targetId, and data (JSON) fields
- EventTypes constants registry for modular event category management
- emitGameEvent() utility for emitting events from server actions and hooks
- Register collection in Payload config
- Document event log system architecture in AGENTS.md
2026-07-28 16:08:04 -04:00
d88fe04b56 fix(grid): prevent split collision by including source in overlap check
Server action: remove 'other.id === entryId' exclusion from the
split overlap scan so the source item's own footprint is treated
as occupied, forcing the split to find a different position.

UI: disable the split button via findEmptySpot check when no room
exists for the split stack, preventing a failed action.
2026-07-28 14:51:56 -04:00
256e5bd68a fix: use arbitrary box-shadow for hover inset effect 2026-07-28 14:47:47 -04:00
f1871ec889 feat(ui): add hover scale and shadow to structure cards 2026-07-28 14:37:24 -04:00
a456c8a246 refactor(nav): replace Storage page with Structures list at /logistics
- Move storage overview from /logistics/storage to /logistics root
- Rename page heading and sidebar label from Storage to Structures
- Update back link on structure detail page
- Remove old /logistics/storage route
2026-07-28 14:23:04 -04:00
01ac20f44f fix(ui): add router.refresh after storage mutations, pluralize labels
ManageStorageDialog now calls router.refresh() after deposit,
withdraw, and transfer so the grid view reflects changes.
Await fetchData() before refreshing.

Resource labels now use pluralize() for correct unit display
(e.g. "1 liter" vs "3 liters").
2026-07-28 14:03:43 -04:00
9175b103c2 feat(grid): add drag-and-drop grid UI components
GridCell — droppable cell with hover/valid/invalid state
GridItem — draggable item with grip icon, visual feedback
GridToolbar — view toggle, auto-arrange, selected-item actions
InventoryGrid — DndContext wiring, R-key rotation, ResizeObserver
  cell sizing, drag overlay
StructureStorageView — client wrapper with grid/list mode toggle,
  action handlers, resource-to-GridItem mapping
2026-07-28 14:03:34 -04:00
866a470750 feat: cap Amount input max to stored amount and remaining capacity
- Withdraw/Transfer tabs: max = currently stored amount of selected resource
- Deposit tab: max = remaining capacity divided by resource massPerUnit
- Amount auto-clamps when resource selection changes
- Show 'Max: X' hint below each amount input
2026-07-27 19:34:47 -04:00
b719f25ff2 feat: use resource unitOfMeasure instead of hardcoded kg, add capacity preview to manage dialog
- Replace hardcoded 'kg' labels with resource.unitOfMeasure in ResourceList
- Rename 'Max Mass' to 'Max Capacity' on structure detail page
- Add dynamic capacity preview bar to ManageStorageDialog deposit/withdraw/transfer tabs
- Add baseline capacity display above tabs in manage dialog
- Clean up unused imports across storage components
2026-07-27 19:27:53 -04:00
12d276d44d feat: implement storage system with capacity tracking and resource management
- Rebuild /logistics/storage overview with capacity bars, filters, and structure cards
- Add /logistics/structures/[id] detail page with resource list, storage rules, upkeep
- Add server actions for deposit, withdraw, and transfer of resources
- Add ManageStorageDialog with deposit/withdraw/transfer tabs
- Add capacity bar component with color-coded utilization
- Add StorageGrid, StructureCard, StorageFilters, ResourceList, StorageRules components
- Add logistics utility functions for mass calculations
- Install shadcn dialog, select, tabs, label components
2026-07-27 19:19:48 -04:00
2eb38c7a82 feat: enhance form descriptions with dynamic tick calculations and validations
- Replace static descriptions in admin fields with dynamic `TickDurationDescription` components.
- Add minimum and maximum constraints to duration fields in various schemas.
- Update `TickDurationDescription` to use `useField` hook for better form integration.
2026-01-09 01:50:55 -05:00
2f00722f30 chore: clean up unused imports in AppSidebar 2026-01-09 01:26:58 -05:00
d04630ca65 feat: add XP display component and experience collection, integrate user XP in layout 2026-01-09 01:26:40 -05:00
9426f12574 feat: add resources to technology schema, improve version display, and introduce migration for resource costs on technologies 2025-12-23 01:01:30 -05:00
c6fecb54f2 feat: add LAST_UPDATED environment variable, update VersionOverlay to display last updated timestamp, and introduce patch script 2025-12-22 16:41:29 -05:00
2727580c24 feat: display app version using environment variable and add VersionOverlay component, add migration for new database tables 2025-12-22 16:07:48 -05:00
adea2dc996 feat: add ranges to production amounts and frequencies, add dynamic value description to build time 2025-12-19 01:28:40 -05:00
def59ee1fb fix: move Dashboard to frontend, pin dependencies in bun.lock to specific versions for stability 2025-12-17 15:15:07 -05:00
dd6bcd30dc feat: switch to Bun, add fonts and styling, update components and UI, add basic front-end
- Added Google Fonts import for `Geist` and `Geist Mono` to `styles.css`.
- Aligned, cleaned styling variables and properties consistently.
- Updated `seedUsers.ts` to include a developer role.
- Introduced `bun.lock` file for dependency management.
2025-12-16 23:26:52 -05:00
Z8MB1E
2e695bd43f feat: application staging deployment (ensure better commits after this) 2025-12-15 01:14:30 -05:00