Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
45 commits
Select commit Hold shift + click to select a range
6a16619
Admin console v2
kamau61 Jan 5, 2026
1fb363c
Implement theme provider and update user navigation component
kamau61 Jan 27, 2026
8a6d472
Refactor admin routes to use '/people' path and implement group/user …
kamau61 Jan 27, 2026
6e93aeb
Refactor breadcrumb logic and improve splat route handling
kamau61 Jan 27, 2026
c012608
Add server info hook and update navigation sidebar to use new data st…
kamau61 Jan 27, 2026
54ebbc1
Update add-user dialog and group details card for improved user manag…
kamau61 Jan 27, 2026
868967d
Refactor user management links to use '/people' path and enhance user…
kamau61 Jan 27, 2026
46eeb47
Add delete user dialog component for user management
kamau61 Jan 27, 2026
fda3d68
Add LinkButton component for enhanced navigation
kamau61 Jan 27, 2026
b2e0a8e
Refactor group and user tables to use LinkButton for navigation
kamau61 Jan 27, 2026
c520d35
Refactor code for improved readability and consistency
kamau61 Jan 27, 2026
48c66e7
Add EntityAclTable component and models for ACL management
kamau61 Jan 27, 2026
3e91437
Add GroupAclCard component for displaying group permissions
kamau61 Jan 27, 2026
141c586
Add UserAclCard component for displaying user-specific permissions
kamau61 Jan 27, 2026
620a00b
Add DeleteGroupDialog component for confirming group deletion
kamau61 Jan 27, 2026
44169d1
fix: handle login redirect and breadcrumbs
kamau61 Feb 10, 2026
2c8be84
formatting
kamau61 Feb 10, 2026
44c2c29
chore: sync api spec with main
kamau61 Feb 10, 2026
700f4e7
Formatting
kamau61 Mar 2, 2026
94111ba
Initial Namespace page
kamau61 Mar 2, 2026
3aa2d06
package upgrade
kamau61 Mar 2, 2026
df01d52
remove unused file
kamau61 Mar 2, 2026
6788415
feat: enhance namespace navigation with layout options and parent link
kamau61 Mar 2, 2026
9da785c
feat: add initial schema list
kamau61 Mar 29, 2026
dc81cf3
chore: upgrade deps
kamau61 Mar 30, 2026
0cf60a7
dev: mock out recursive schema apis
kamau61 Mar 30, 2026
b8905dd
feat: add schema implementation
kamau61 Apr 17, 2026
b728795
feat: improve layout of sidebar header and content area
kamau61 Apr 17, 2026
6d63fd0
chore: formatting
kamau61 Apr 17, 2026
edd14b0
feat: add rich text editor
kamau61 Jun 30, 2026
ef7a390
chore: formatting and typescript fixes
kamau61 Jun 30, 2026
45c1247
chore: documentation
kamau61 Jul 5, 2026
f6d418d
feat: browse namespace acls
kamau61 Jul 19, 2026
f5ebb38
chore: server permssion placeholder pages
kamau61 Jul 19, 2026
c23d2c3
chore: update dependencies
kamau61 Jul 19, 2026
40782b0
chore: update components
kamau61 Aug 3, 2026
b98fb8b
feat: add, edit, delete namespace permissions
kamau61 Aug 3, 2026
2db9f0e
chore: formatting
kamau61 Aug 3, 2026
12d45d7
test: add breadcrumb unit tests
kamau61 Aug 3, 2026
b9b69c1
fix: update dialog usages and typescript errors
kamau61 Aug 3, 2026
7886ab8
chore: rebase on development
kamau61 Aug 3, 2026
ac6cb53
ci: update ci pipeline and scripts
kamau61 Aug 4, 2026
ab7e234
ci: run inside docker
kamau61 Aug 4, 2026
5f14fe7
chore: fix typing issue in tests
kamau61 Aug 4, 2026
8a5f8c9
fix: run ci image as user not root
kamau61 Aug 4, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
31 changes: 31 additions & 0 deletions .buildkite/build.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
#!/bin/bash
#
# Copyright [ 2020 - 2024 ] [Matthew Buckton]
# Copyright [ 2024 - 2026 ] [Maps Messaging B.V.]
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#
set -euo pipefail

corepack enable

pnpm install
# TODO - Fetch latest api spec
pnpm run gen-api
pnpm run build

if [ ! -d dist ]; then
echo "Build failed: 'dist' directory not found."
exit 1
fi
tar --create --verbose --gzip --file=webAdminClient.tgz dist/*
29 changes: 29 additions & 0 deletions .buildkite/pipeline.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
agents:
queue: "java_build_queue"

steps:
- key: "build"
label: ":npm: Build and package web client"
command: "./.buildkite/build.sh"
artifact_paths:
- "webAdminClient.tgz"
plugins:
- docker-compose#v5.13.0:
config: docker-compose.yaml
run: node
propagate-uid-gid: true
- key: "test"
label: ":npm: test web client"
command: "./.buildkite/test.sh"
plugins:
- docker-compose#v5.13.0:
config: docker-compose.yaml
run: node
propagate-uid-gid: true

- key: "publish"
label: ":github: Publish release"
command: "./.buildkite/publish.sh"
depends_on:
- "build"
if: build.branch == "main" || build.branch == "development"
62 changes: 62 additions & 0 deletions .buildkite/publish.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,62 @@
#!/bin/bash
#
# Copyright [ 2020 - 2024 ] [Matthew Buckton]
# Copyright [ 2024 - 2026 ] [Maps Messaging B.V.]
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#

set -euo pipefail

buildkite-agent artifact download webAdminClient.tgz .

GITHUB_TOKEN="$(buildkite-agent secret get GIT_HUB_TOKEN)"
export GITHUB_TOKEN
VERSION=$(jq -r .version package.json)
GITHUB_REPO="Maps-Messaging/web-admin-client"

if [ "$BUILDKITE_BRANCH" == "main" ]; then
echo "Detected Main branch. Preparing production release..."
VERSION_NAME="maps_web_client_${VERSION}"
TARGET_BRANCH="main"
elif [ "$BUILDKITE_BRANCH" == "development" ]; then
echo "Detected Development branch. Preparing dev release..."
VERSION_NAME="maps_web_client_dev"
TARGET_BRANCH="development"
else
echo "Branch $BUILDKITE_BRANCH is not main or development. Skipping GitHub release."
exit 0
fi


echo "Deleting existing release '${VERSION_NAME}' from GitHub if it exists..."
gh release delete "${VERSION_NAME}" --repo "${GITHUB_REPO}" --yes || true
sleep 5

echo "Creating a new release for ${TARGET_BRANCH}..."
gh release create "${VERSION_NAME}" \
--repo "${GITHUB_REPO}" \
--title "${VERSION_NAME}" \
--notes "Automated release ${VERSION_NAME} from branch ${BUILDKITE_BRANCH}" \
--target "${TARGET_BRANCH}" \
--draft

sleep 5

echo "Uploading webAdminClient.tgz to GitHub..."
gh release upload "${VERSION_NAME}" webAdminClient.tgz --repo "${GITHUB_REPO}" --clobber

echo "Publishing release..."
gh release edit "${VERSION_NAME}" --repo "${GITHUB_REPO}" --draft=false

echo "Release process complete!"
31 changes: 31 additions & 0 deletions .buildkite/test.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
#
# Copyright [ 2020 - 2024 ] [Matthew Buckton]
# Copyright [ 2024 - 2026 ] [Maps Messaging B.V.]
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#


corepack enable

pnpm install

pnpm run test

sonar-scanner \
-Dsonar.projectKey=web-admin-client \
-Dsonar.organization=maps-messaging \
-Dsonar.sources=src \
-Dsonar.typescript.lcov.reportPaths=coverage/lcov.info \
-Dsonar.host.url=https://sonarcloud.io \
-Dsonar.login="$(buildkite-agent secret get SONAR_TOKEN)"
9 changes: 0 additions & 9 deletions .editorconfig

This file was deleted.

104 changes: 0 additions & 104 deletions .eslintrc.js

This file was deleted.

1 change: 0 additions & 1 deletion .gitattributes

This file was deleted.

39 changes: 12 additions & 27 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -1,30 +1,15 @@
# See https://help.github.com/articles/ignoring-files/ for more about ignoring files.

# dependencies
/node_modules
/.pnp
.pnp.js

# testing
/coverage

# production
/build
admin
.next

# misc
node_modules
.DS_Store
.eslintcache
dist
webAdminClient.tgz
dist-ssr
*.local
count.txt
.env
.idea
/.env
/.env.local
/.env.development.local
/.env.test.local
/.env.production.local

npm-debug.log*
yarn-debug.log*
yarn-error.log*
.vscode
.nitro
.tanstack
.wrangler
.pnpm-store

/src/generated
4 changes: 4 additions & 0 deletions .prettierignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
# Ignore artifacts:
build
coverage
pnpm-lock.yaml
11 changes: 11 additions & 0 deletions .vscode/settings.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
{
"files.watcherExclude": {
"**/routeTree.gen.ts": true
},
"search.exclude": {
"**/routeTree.gen.ts": true
},
"files.readonlyInclude": {
"**/routeTree.gen.ts": true
}
}
50 changes: 50 additions & 0 deletions AGENTS.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,50 @@
# AI Agents & Developers

This document provides guidelines for AI agents (e.g., Claude, GitHub Copilot) and human developers working on this codebase to ensure consistency and efficiency.

## Context & Navigation

### 1. Codebase Structure

- `src/api/`: Contains the type-safe API client definitions generated from OpenAPI.
- `src/components/ui/`: Low-level, reusable UI primitives (Radix + Tailwind).
- `src/components/[feature]/`: Feature-specific components.
- `src/hooks/`: Custom React hooks (e.g., `useAuth`, `use-debounced-value`).
- `src/lib/`: Core utilities and singleton services (e.g., `authService`, `utils.ts`).
- `src/routes/`: The application's routing tree, organized by filesystem.
- `resources/`: Contains the source of truth for the API (`openapi.json`).

### 2. Key Files for Reference

- **API Types**: `src/api/spec.d.ts` (Generated). Always refer to this for request/response shapes.
- **Authentication Logic**: `src/lib/auth.ts` and `src/hooks/useAuth.ts`.
- **Routing Configuration**: `src/routes/__root.tsx` and `src/routeTree.gen.ts`.

## Development Workflow

### 1. API Changes

If the backend API changes:

1. Update `resources/openapi.json`.
2. Run `pnpm gen-api` to regenerate TypeScript types.
3. Verify that the changes haven't broken existing components via TypeScript errors.

### 2. Adding New Features

1. **Define Data Requirements**: Determine if new API endpoints are needed in the OpenAPI spec.
2. **Create Routes**: Add new files in `src/routes/`. Use `_authenticated` prefix for protected routes.
3. **Build Components**: Utilize existing components in `src/components/ui` to maintain design consistency.
4. **Mocking (Optional)**: If the backend endpoint is not yet available, update the MSW handlers in `src/mocks/config.ts` or `src/mocks/schema.ts`.

### 3. Testing

- Use **Vitest** for all new logic.
- Ensure that any new network-dependent code is covered by **MSW** mocks to keep tests hermetic and fast.

## Coding Standards

- **TypeScript**: Strict typing is mandatory. Avoid `any` at all costs.
- **Immutability**: Prefer immutable patterns, especially when updating state in the `AuthService`.
- **Styling**: Use Tailwind utility classes. For complex components, use the `cn()` utility from `src/lib/utils.ts`.
- **No Manual Route Edits**: Never manually edit `src/routeTree.gen.ts`; it is an auto-generated file.
Loading