The central administrative gateway for the D&D Mapp platform. This Angular-based portal provides infrastructure oversight, security management, and resource orchestration for the entire ecosystem.
Caution
Restricted Access: This application is strictly reserved for users with Admin or Super Admin roles. Unauthorized access attempts are logged and monitored.
As the primary internal management tool, the Admin Client enables authorized administrators to perform high-level platform operations:
- Server Configuration: Global management of environment variables, scaling parameters, and microservice settings.
- API Resource Management: Create, update, and deprecate API endpoints and resources across the D&D Mapp ecosystem.
- Log Inspection: Real-time access to centralized server logs for debugging and platform health monitoring.
- User Management: Oversee user accounts, adjust permissions, and manage role-based access control (RBAC).
- Secret Rotation: Securely rotate cryptographic keys, OAuth secrets, and database credentials to maintain platform integrity.
- Audit Trails: Monitor administrative actions to ensure compliance and security standards.
This project uses mise-en-place to manage runtime versions and ensure environment consistency across development and CI/CD.
-
Install Mise to automatically manage:
- Node.js: v24.13.1
- pnpm: v10.29.3
-
mkcert: Required for local HTTPS. Install mkcert.
-
Clone the repository:
git clone https://github.com/dnd-mapp/admin-client.git cd admin-client -
Install toolchains and dependencies:
mise install pnpm install
-
Configure Local DNS:
Add the following entry to your
/etc/hosts(macOS/Linux) orC:\Windows\System32\drivers\etc\hosts(Windows) file:127.0.0.1 localhost.admin.dndmapp.dev -
Generate SSL Certificates:
Generate certificates using
mkcert:mkcert -install pnpm gen:ssl-cert
The application is containerized using Docker for consistent deployment across different architectures (amd64, arm64, arm/v7).
To spin up the application quickly using the pre-built image:
docker compose -f .docker/compose.yaml up -dThe application will be accessible at http://localhost:4300.
Important
HTTPS Support: The default Docker configuration does not support HTTPS out of the box. While the local development server (pnpm start) uses mkcert for secure communication, the Docker container serves the application over standard HTTP via Nginx. If you require HTTPS within a containerized environment, you must manually mount your SSL certificates into the Nginx container and update the server configuration.
We use Docker Bake for high-performance, multi-platform builds. To build the image locally:
docker buildx bake -f .docker/docker-bake.hcl appThis will trigger a multi-stage build (using Node 24 and Nginx 1.29) and generate SBOM and provenance attestations.
Run the following command to start the local development server with HTTPS:
pnpm startNavigate to https://localhost.admin.dndmapp.dev:4300/. The application will automatically reload if you change any source files.
Tip
Troubleshooting Connection Errors: If you encounter "Privacy/SSL" errors or "Address Not Found" in your browser:
- Ensure you have followed the Local Environment Setup steps to add
127.0.0.1 localhost.admin.dndmapp.devto your system'shostsfile. - Verify that you have run
mkcert -installand generated the.pemfiles in the root directory. - If the browser still blocks the connection, try restarting the browser or clearing the HSTS cache for
localhost.admin.dndmapp.dev.
We use ESLint for logic, Stylelint for CSS/SCSS, and Prettier for consistent formatting.
We provide a list of recommended extensions in .vscode/extensions.json. When you open the project in VS Code, you will be prompted to install them.
To automate linting and formatting on save, ensure your .vscode/settings.json includes:
{
"editor.defaultFormatter": "esbenp.prettier-vscode",
"editor.formatOnSave": true,
"editor.codeActionsOnSave": {
"source.fixAll.eslint": "explicit",
"source.fixAll.stylelint": "explicit"
},
"stylelint.validate": ["css", "postcss"],
"[html]": {
"editor.defaultFormatter": "esbenp.prettier-vscode"
},
"[typescript]": {
"editor.defaultFormatter": "esbenp.prettier-vscode"
}
}- Open Settings.
- Navigate to Languages & Frameworks > Style Sheets > Stylelint.
- Check Enable.
- Check Run stylelint --fix on save.
- Open Settings.
- Navigate to Languages & Frameworks > JavaScript > Code Quality Tools > ESLint.
- Select Automatic ESLint configuration.
- Check Run eslint --fix on save.
- Open Settings.
- Navigate to Languages & Frameworks > JavaScript > Prettier.
- Select Automatic Prettier configuration.
- Check Run on save.
- Ensure the "Prettier package" points to the project's
node_modules/prettier.
- Start:
pnpm start- Runs the dev server. - Build:
pnpm build- Compiles the application into thedist/admin-client/browserdirectory. - Lint:
pnpm lint- Runs ESLint to check for code quality issues. - Lint Styles:
pnpm stylelint- Runs Stylelint to check CSS/Tailwind rules. - Format:
pnpm format:write- Manually format all files using Prettier.
- Framework: Angular 21
- Package Manager: pnpm
- Environment Manager: mise-en-place
- Styling: Tailwind CSS
- Linting: ESLint & Stylelint
- Code Formatting: Prettier
- Local HTTPS: mkcert
- Containerization: Docker & Nginx
The project follows a modular Angular architecture, optimized for Tailwind CSS v4 and clear separation of concerns.
admin-client/
βββ .docker/ # Docker configuration, Compose files, and Bake HCL
βββ .vscode/ # Visual Studio Code settings and recommendations
βββ public/ # Static assets (images, icons, etc.)
βββ src/
β βββ app/
β β βββ core/ # Singleton services, guards, and base components
β β β βββ config/
β β β β βββ app.config.ts # Application-wide providers and configuration
β β β βββ root/ # The main application entry component
β β β βββ root.component.ts
β β βββ features/ # Functional modules (Campaigns, VTT, SRD, etc.)
β β βββ shared/ # Reusable components, pipes, and directives
β βββ index.html # Application host page
β βββ main.ts # Bootstrapping logic
β βββ styles.css # Tailwind v4 entry point with @theme imports
βββ .tool-versions # Version management for Node.js and pnpm (Mise)
βββ package.json # Project dependencies and scripts
βββ pnpm-lock.yaml # Locked dependency versions
βββ tsconfig.json # TypeScript configuration
- Root Component: Following a clean-core pattern, the main entry point has been renamed to
root.component.tsand resides insrc/app/core/root/. - Tailwind CSS v4: This project uses the CSS-first configuration approach of Tailwind v4. Theme variables and customizations are defined directly in
src/styles.cssusing the@themeblock, eliminating the need for a separatetailwind.config.js. - Environment Management: We use
.tool-versionsto ensure thatmiseloads the exact versions of Node.js and pnpm required for this project.
To prepare the application for a production environment, you must generate a production build. This process optimizes the bundle size and minifies the code for better performance.
Run the following command to create a production-ready build:
pnpm buildOnce the build process is complete, the compiled files will be located in the following directory:
dist/admin-client/browser
These files are static and can be deployed to any web server (e.g., Nginx, Apache, or cloud hosting services like Vercel, Netlify, or AWS S3).
Note: Ensure your web server is configured to redirect all requests to index.html to support Angular's client-side routing.
Copyright Β© 2026 NoNamer777. All rights reserved.
This software and its associated documentation are proprietary. Access to and use of this software is strictly governed by the terms of the LICENSE file included in this repository.
No part of this project may be reproduced, distributed, or transmitted in any form or by any means, including copying or creating derivative works, without the prior written permission of the author.
For inquiries regarding licensing or permissions, please contact the author via the GitHub repository.
Contributions are welcome! Please read our Contributing Guidelines for details on our code of conduct, branching strategy, and the process for submitting pull requests.
As this project is proprietary, please ensure you have received authorization before contributing.