TASKS-1823 WebManager module
This commit is contained in:
@@ -1,3 +1,18 @@
|
||||
# CRUX
|
||||
|
||||
A monorepo starter for products that need an admin panel, an API, and a public website. It ships an
|
||||
AdonisJS backend, a React admin panel with a module generator, and a Next.js website that renders
|
||||
the pages editors publish through the built-in CMS.
|
||||
|
||||
| App | Source | Dev port | What it is |
|
||||
| --------------- | --------------- | -------- | ------------------------------------------------------ |
|
||||
| Backend API | `apps/backend/` | 3333 | AdonisJS — data, auth, permissions, public content API |
|
||||
| Admin panel | `apps/admin/` | 5173 | React + Vite — the internal UI |
|
||||
| Public website | `apps/web/` | 3000 | Next.js — the site visitors see |
|
||||
| Shared packages | `packages/` | — | UI, hooks, services, types, utils |
|
||||
|
||||
Full documentation lives in [`docs/`](./docs/Readme.md).
|
||||
|
||||
### Tech Stack
|
||||
|
||||
#### Backend
|
||||
@@ -6,94 +21,157 @@
|
||||
- TypeScript
|
||||
- Lucid ORM
|
||||
- PostgreSQL / MySQL (configurable)
|
||||
- Redis, S3 / MinIO storage
|
||||
|
||||
#### Frontend
|
||||
#### Admin panel
|
||||
|
||||
- React
|
||||
- TypeScript
|
||||
- Vite
|
||||
- React Query / Mobx / Axios
|
||||
- Component-based UI system
|
||||
- React Query / MobX / Axios
|
||||
- Radix UI + Tailwind component system
|
||||
- React Hook Form + Zod
|
||||
|
||||
#### Public website
|
||||
|
||||
- Next.js (App Router, React Server Components)
|
||||
- TypeScript
|
||||
- next-intl
|
||||
- Tailwind CSS
|
||||
|
||||
### Getting Started
|
||||
|
||||
#### Prerequisites
|
||||
|
||||
Node.js >= v24.18.0
|
||||
npm >= 11.15.0
|
||||
Database PostgreSQL
|
||||
- Node.js `24.18.0` (see `.nvmrc`; the package manifest requires `>=24.0.0`)
|
||||
- npm `>=11.6.2` (the repo pins `npm@11.15.0`)
|
||||
- PostgreSQL
|
||||
|
||||
#### Installation
|
||||
|
||||
```
|
||||
```bash
|
||||
git clone gitlab@git.rexsoftproduction.com:crux/admin.git
|
||||
cd crux
|
||||
npm install
|
||||
```
|
||||
|
||||
```bash
|
||||
cd crux && npm install --force
|
||||
```
|
||||
|
||||
> `--force` is required. `typescript-eslint` does not yet declare support for the TypeScript
|
||||
> version this repo uses, so a plain `npm install` fails with `ERESOLVE`. Never substitute
|
||||
> `--legacy-peer-deps` — it strips nested peer dependencies and breaks the backend at runtime. Use
|
||||
> `npm ci --force` for a reproducible install, and `npm install <package> --force` when adding one.
|
||||
> See [troubleshooting.md](./troubleshooting.md).
|
||||
|
||||
### Configuration
|
||||
|
||||
Environment variables are defined in root `.env`
|
||||
Each workspace defines its own environment variables. Copy the workspace's `.env.example` to `.env` and fill in the values:
|
||||
|
||||
```
|
||||
TZ=UTC
|
||||
PORT=3333
|
||||
HOST=localhost
|
||||
LOG_LEVEL=info
|
||||
APP_KEY=
|
||||
NODE_ENV=development
|
||||
DB_HOST=127.0.0.1
|
||||
DB_PORT=5432
|
||||
DB_USER=postgres
|
||||
DB_PASSWORD=postgres
|
||||
DB_DATABASE=adonis
|
||||
VITE_API_URL=http://0.0.0.0:3333
|
||||
VITE_TINYMCE_API_KEY=
|
||||
| Env file | Covers |
|
||||
| ------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
||||
| `apps/backend/.env` | Server (`PORT`, `APP_KEY`), database (`DB_*`), storage (`AWS_*`, `S3_*`), and the public site link (`WEB_APP_URL`, `WEB_REVALIDATE_SECRET`) used to purge its cache |
|
||||
| `apps/admin/.env` | `VITE_API_URL` (backend), `VITE_WEB_URL` (public site, used for page previews), `VITE_TINYMCE_API_KEY` |
|
||||
| `apps/web/.env` | `BACKEND_API_URL` (backend base URL for server rendering), `REVALIDATE_SECRET` (must match the backend's `WEB_REVALIDATE_SECRET`), `SITE_URL` (canonical origin) |
|
||||
|
||||
`docker-compose.yml` loads each service's env from the same per-app files. Inside Docker, service
|
||||
URLs must use compose service names (`http://backend:3333`), not `localhost`.
|
||||
|
||||
### Running
|
||||
|
||||
#### Locally
|
||||
|
||||
| Command | Description |
|
||||
| ----------------------- | ----------------------------------------------- |
|
||||
| `npm run dev:backend` | Start the AdonisJS backend in development mode |
|
||||
| `npm run dev:admin-app` | Start the React admin application |
|
||||
| `npm run dev:web` | Start the Next.js web application |
|
||||
| `npm run dev:all` | Start backend, admin, and web apps concurrently |
|
||||
|
||||
#### With Docker
|
||||
|
||||
```bash
|
||||
docker compose up -d
|
||||
```
|
||||
|
||||
### Module Generator
|
||||
Brings up everything: backend (3333), admin (5173), web (3000), PostgreSQL (5432), Redis (6379),
|
||||
MinIO (9000 / console 9001) and pgAdmin (5050).
|
||||
|
||||
The module generator allows you to create full CRUD modules by selecting:
|
||||
Two quirks worth knowing when a change appears not to take effect:
|
||||
|
||||
- The web container keeps `.next` on an anonymous volume that survives rebuilds. Clear it with
|
||||
`docker compose up -d --force-recreate --renew-anon-volumes web`.
|
||||
- Backend HMR does not always pick up edits on macOS (bind-mount file events); restart
|
||||
`crux_backend_adonis` to load them.
|
||||
|
||||
### Scripts
|
||||
|
||||
#### Build
|
||||
|
||||
| Command | Description |
|
||||
| ----------------------- | ------------------------------------------ |
|
||||
| `npm run build:backend` | Build the backend application |
|
||||
| `npm run build:admin` | Type-check and build the admin application |
|
||||
| `npm run build:web` | Type-check and build the Next.js web app |
|
||||
|
||||
#### Test
|
||||
|
||||
| Command | Description |
|
||||
| ---------------------- | ---------------------------------------------- |
|
||||
| `npm run test:backend` | Backend functional tests (requires a database) |
|
||||
| `npm run test:admin` | Admin unit tests (Vitest) |
|
||||
| `npm run test:web` | Web app unit tests (Vitest) |
|
||||
|
||||
#### Lint and format
|
||||
|
||||
| Command | Description |
|
||||
| ---------------------- | -------------------------- |
|
||||
| `npm run lint` | ESLint across the monorepo |
|
||||
| `npm run lint:fix` | ESLint with autofix |
|
||||
| `npm run format` | Prettier write |
|
||||
| `npm run format:check` | Prettier check, no writes |
|
||||
|
||||
#### Versions
|
||||
|
||||
| Command | Description |
|
||||
| ----------------------- | ------------------------------------ |
|
||||
| `npm run version:patch` | Update patch version of all packages |
|
||||
| `npm run version:minor` | Update minor version of all packages |
|
||||
| `npm run version:major` | Update major version of all packages |
|
||||
|
||||
> Versions are updated without creating git tags.
|
||||
|
||||
### Features
|
||||
|
||||
#### Module Generator
|
||||
|
||||
Create full CRUD modules by selecting:
|
||||
|
||||
- Database table
|
||||
- Fields and types
|
||||
- Validation rules
|
||||
- List view configuration
|
||||
|
||||
#### Generated Output
|
||||
**Generated output** — Backend: controllers, validators, routes. Frontend: pages, forms, tables, API.
|
||||
|
||||
**Backend**: controllers, validators, routes
|
||||
**Frontend**: pages, forms, tables, API
|
||||
#### Authentication & Authorization
|
||||
|
||||
### Authentication & Authorization
|
||||
|
||||
- JWT / Session-based authentication
|
||||
- JWT / session-based authentication
|
||||
- Role & permission system
|
||||
- Policy-based access control
|
||||
|
||||
### Scripts
|
||||
#### Content Management
|
||||
|
||||
#### Development
|
||||
Web Manager is the built-in CMS: editors build localized pages from prebuilt blocks in the admin
|
||||
panel, preview them privately, and publish to the Next.js site, which purges only the cache entries
|
||||
the change affects. See [Web Manager](./docs/core/web-manager/Readme.md).
|
||||
|
||||
| Command | Description |
|
||||
| ----------------------- | ---------------------------------------------- |
|
||||
| `npm run dev:backend` | Start the AdonisJS backend in development mode |
|
||||
| `npm run dev:admin-app` | Start the React admin application |
|
||||
| `npm run dev:all` | Start backend and admin app concurrently |
|
||||
### Documentation
|
||||
|
||||
#### Build
|
||||
|
||||
| Command | Description |
|
||||
| ----------------------- | ----------------------------- |
|
||||
| `npm run build:backend` | Build the backend application |
|
||||
| `npm run build:admin` | Build the admin application |
|
||||
|
||||
#### Versions
|
||||
|
||||
| Command | Description |
|
||||
| --------------- | ------------------------------------ |
|
||||
| `npm run patch` | Update Patch version of all packages |
|
||||
| `npm run minor` | Update Minor version of all packages |
|
||||
| `npm run major` | Update Major version of all packages |
|
||||
|
||||
> Versions are updated without creating git tags.
|
||||
| Topic | Where |
|
||||
| ------------------------ | ---------------------------------------------------- |
|
||||
| Documentation home | [docs/Readme.md](./docs/Readme.md) |
|
||||
| Public website | [apps/web/Readme.md](./apps/web/Readme.md) |
|
||||
| Architecture | [docs/architecture/](./docs/architecture/Readme.md) |
|
||||
| Core modules | [docs/core/](./docs/Readme.md#core-modules) |
|
||||
| Shared packages | [docs/packages/Readme.md](./docs/packages/Readme.md) |
|
||||
| Install and setup issues | [troubleshooting.md](./troubleshooting.md) |
|
||||
|
||||
Reference in New Issue
Block a user