1
0
Fork 0
Commit graph

79 commits

Author SHA1 Message Date
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
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
eef1b11bb1 feat(rbac): migrate server actions and service layers to RBAC
Replace hasRoles calls with hasPermission in all server actions and page
components. Update qualification checks (logistics, intelligence) to use
permission-based checks instead of role name matching. Update staff lookup
in tickets/staff.ts to query roles collection. Use enlistmentDate field
on profile page instead of createdAt.
2026-08-19 19:47:57 -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
2f536a814b chore(flappy): remove parenthetical from flight simulator message 2026-08-17 22:22:06 -04:00
ae732496ed chore: regenerate Payload types and import map 2026-08-17 22:18:27 -04:00
50bc0e3441 style(migrations): rename migration files, add new migration for shims, add favicon for front-end 2026-08-17 02:02:16 -04:00
7db1f648bf style(app): format app routes, pages, and server actions 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
14d92bf277 feat(helpdesk): add helpdesk pages
Add the helpdesk list page and ticket detail page routes.

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

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
2026-08-16 18:12:40 -04:00
40f23e8774 feat(helpdesk): add ticket server actions
Add createTicket, replyToTicket, updateTicketStatus, and assignTicket server actions with notification and event-log emission.

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

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
2026-08-16 18:12:36 -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
4a2e0d5406 feat(banking): redesign banking overview with wallet hero, activity feed, and tabs 2026-08-12 23:13:27 -04:00
ba94dfa7da fix(deploy): set force-dynamic and outputFileTracingRoot for container builds 2026-08-12 23:11:32 -04:00
91c5a8f625 feat(deploy): add /api/health endpoint for container liveness probes 2026-08-12 23:11:16 -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
dcf8a03dea feat(missions): add cover image and redesign mission detail page with hero header
Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent)

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
2026-08-12 16:21:07 -04:00
cce00861c2 feat(campaigns): redesign campaign detail page with cover hero and mission thumbnails
Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent)

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
2026-08-12 16:21:06 -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
bc1456db88 feat(notify): push banking move and shipment arrival owner notifications 2026-08-12 12:38:46 -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
b024bcf2da style(ui): add theme-matching scrollbars across the frontend 2026-08-11 23:25:47 -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
caae76e6b2 feat(intelligence): gate intelligence content behind the intelligence qualification
- Add hasIntelligenceQualification access helper
- Redirect non-qualified users away from /intelligence
- Hide mission and campaign widgets on the dashboard for non-qualified users
- Guard hasLogisticsQualification against a null user
2026-08-11 23:25:27 -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
35e1354043 chore(frontend): remove stale dashboard redirect and sample API route 2026-08-11 23:25:03 -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
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
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
126d5b6dae feat(locker): add personal locker page and UI 2026-08-02 14:32:49 -04:00
d32f36a39c feat(locker): add locker and loadout server actions 2026-08-02 14:32:47 -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
ee87bd3023 feat(banking): add banking server actions and event logging 2026-08-02 04:10:37 -04:00
83d5b85247 feat(sidebar): enhance sidebar navigation and improve org chart styling 2026-08-02 03:14:30 -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
d6ba4ccc39 feat(logistics): add game-vehicles collection and deployed vehicle views 2026-08-02 02:03:43 -04:00