1
0
Fork 0
Commit graph

221 commits

Author SHA1 Message Date
ae732496ed chore: regenerate Payload types and import map 2026-08-17 22:18:27 -04:00
e57f38cd8f feat(config): switch AI provider from Ollama to Unsloth with streaming support
- Add Unsloth OpenAI-compatible provider with @ai-sdk/openai
- Rewrite AI generation handlers with Vercel AI SDK streaming
- Add plainTextToLexicalJson helper for richText field generation
- Configure HeadingFeature and PayloadAiPluginLexicalEditorFeature
- Stub @payloadcms/richtext-lexical server entry in client bundle
- Extract meta constants for site title and description
- Add UNSLOTH_API_KEY to .env.development
2026-08-17 22:18:23 -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
cdeebd05f8 style(static): format payload admin static components 2026-08-16 23:27:51 -04:00
9f4faa948b style(config): format generated payload schema 2026-08-16 23:27:51 -04:00
c27b12c76c style(bot): format Discord bot modules 2026-08-16 23:27:51 -04:00
50f964cdf9 style(scripts): format tick scripts, seed tools, and migrations 2026-08-16 23:27:51 -04:00
2acf52788f style(collections): format Payload collection configs 2026-08-16 23:27:51 -04:00
6685fe68cd style(lib): format shared libraries and remove unused imports 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
7db1f648bf style(app): format app routes, pages, and server actions 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
afb61f6227 feat(globals): add Shims global for admin CSS/JS shims 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
fa70ed0956 feat(config): add meta information for Polaris Task Force website 2026-08-16 19:41:21 -04:00
4905022dd5 feat(config): wire prodMigrations for auto-migrate on prod boot
Import the migrations array from src/migrations/index.ts and pass it as prodMigrations to the postgres adapter. Per @payloadcms/db-postgres connect.js, when NODE_ENV=production the adapter now auto-runs payload migrate against this array on every boot, so pending migrations apply on deploy without a manual docker exec step. Idempotent on next prod boot since payload_migrations already tracks batches 1-2. DEPLOYMENT.md §7's manual 'docker exec ... payload/bin.js migrate' still works as a fallback via filesystem discovery.
2026-08-16 19:39:19 -04:00
0ed8721889 refactor(migrations): split tickets DDL out of migration 7 into migration 8
Migration 7 originally bundled tickets DDL with pending schema drift, which made it fail against prod (no tickets objects existed there). Split into a stripped migration 7 (no tickets statements) and a new tickets-only migration 8 that creates enum_tickets_* types, ALTER TYPE ADD VALUE for 'tickets' + 'ticket:*' muted-type values, tickets and tickets_activity tables, and the payload_locked_documents_rels.tickets_id column + FK + index. Migration 8's .json snapshot is the new forward baseline for migrate:create (verified via zero-diff probe). Applied to prod: m1-7 baselined as batch 1, m8 applied as batch 2.
2026-08-16 19:38:56 -04:00
10560c1446 fix(version): resolve git metadata from env/SOURCE_COMMIT for Coolify builds
Coolify strips .git from the build context, so git CLI calls in
generate:version-info fail during Docker builds. The script now
resolves metadata in priority order: GIT_* env overrides, then
SOURCE_COMMIT (Coolify's injected build arg, shortened to 7 chars),
then git CLI fallback for local builds. Dockerfile passes the ARGs
through as ENV before the build; DEPLOYMENT.md documents the required
'Include Source Commit in Build' setting.
2026-08-16 18:46:21 -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
56b79e142e fix(migrations): backfill grid columns before NOT NULL on data-bearing table
The generated migration added grid_x/grid_y as numeric NOT NULL without a
default, which fails on prod where game_structures_stored_resources already
has rows ('column contains null values'). Add the columns with DEFAULT 0 to
backfill existing rows, then drop the default to match the target schema.
2026-08-16 18:23:33 -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
9ec4555200 feat(migrations): add production migration for tickets and pending schema drift
Add migration 20260816_213455 covering the Tickets collection plus all schema drift accumulated since 20260109 (banking, market, game vehicles/NPCs, attendance, enum extensions).

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

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
2026-08-16 18:12:59 -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
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
ff986bf4ec feat(helpdesk): add ticket domain libs
Add shared ticket metadata (labels, styles), staff resolution, and plaintext-to-lexical conversion helpers.

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

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
2026-08-16 18:12:33 -04:00
e7eff028b7 feat(tickets): add Tickets collection
Add the helpdesk Tickets collection with status/priority/category enums, reporter/assignee relationships, activity timeline, and closedAt lifecycle. Register in payload.config and refresh generated types.

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

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
2026-08-16 18:12:27 -04:00
94cd7c5626 feat(helpdesk): add ticket notification types
Add ticket:created/assigned/reply/status labels and muteable notification types.

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

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
2026-08-16 18:12:22 -04:00
6419c9676f feat(helpdesk): add ticket event log wiring
Add ticket:create/reply/status-change/assign event types, extend the emit targetCollection union, and register tickets in GameEventLogs target collections.

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

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
2026-08-16 18:12:19 -04:00
6c97b1a41c feat(docker): gate Discord bot on DISCORD_TOKEN presence in container entrypoint 2026-08-13 20:04:27 -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
cabbe071d7 feat(bot): register signup/link/ping commands globally for DM use
Add a scope field to BotCommand so /signup, /link and /ping register globally (available in DMs — guild-scoped commands never appear there) while /announce stays guild-only. Migrate ephemeral replies to MessageFlags and make the /signup welcome message resilient to blocked DMs.

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

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
2026-08-13 17:00:44 -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
2dff16a291 fix(logistics): normalize Structure minFrequency defaultValue as string 2026-08-12 23:11:45 -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
ab0ff6b96e fix(maps): set useAsTitle for admin label
Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent)

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
2026-08-12 16:21:11 -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
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
b14e04c487 feat(factions): add player-faction type, reputation, relationships, and cover image
Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent)

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
2026-08-12 16:21:03 -04:00
00919ceeb3 feat(bot): add Discord bot scaffold with sign-up, attendance embeds, and notification bridge 2026-08-12 12:39:00 -04:00
ad774121b0 feat(missions): add generate-mission bin for next Saturday template 2026-08-12 12:38:55 -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
bc1456db88 feat(notify): push banking move and shipment arrival owner notifications 2026-08-12 12:38:46 -04:00
2a457a5dd9 feat(notify): add finance and shipment-completed notification types 2026-08-12 12:38:45 -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
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
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
5ee98d61da feat(users): add trusted role, preferences, and profile/account auto-provisioning
- Add trusted role and isTrusted access helper
- Add notification muting and display preferences to the user schema
- Auto-create a profile and personal bank account when a user signs up
- Add idempotent backfillProfiles seed script for existing members
2026-08-11 23:25:09 -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
3a46d4e5be feat(npcs): add game-npcs collection for vendors
Developer-gated collection for NPC characters, including the vendor
fields (enabled, priceModifier, sells[]) used by the marketplace to
attribute auto-generated listings to background merchants.
2026-08-10 16:03:52 -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
4a76b54426 chore(types): regenerate payload types and schema
Regenerate payload-types.ts and payload-generated-schema.ts to cover
the forthcoming user-notifications, game-npcs, and market collections
(including the quantity column on market-negotiations).
2026-08-10 16:02:04 -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
d32f36a39c feat(locker): add locker and loadout server actions 2026-08-02 14:32:47 -04:00
0fc898d227 feat(locker): add locker grid and loadout helpers 2026-08-02 14:32:45 -04:00
9a565986e9 feat(locker): add event logging for locker and loadout actions 2026-08-02 14:32:42 -04:00
7f4df6597a feat(locker): add locker-storages and loadouts collections 2026-08-02 14:32:40 -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
4e0a906697 feat(banking): add banking service library with transaction engine 2026-08-02 04:10:34 -04:00
a440623d93 feat(banking): add bank accounts, transactions, and ledger entries collections 2026-08-02 04:10:28 -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
2e65ab08d8 chore(types): regenerate payload types and database schema 2026-08-02 02:04:48 -04:00
6cce6116b8 refactor(sidebar): use next/link for client-side navigation 2026-08-02 02:04:12 -04:00