@bobbykim/manguito-cms-cli 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,9 @@
1
+ DB_URL=postgres://user:password@localhost:5432/mydb
2
+
3
+ # Storage
4
+ {{storageAdapter}}
5
+
6
+ JWT_SECRET=change-me-before-going-to-production
7
+ PORT=3000
8
+ NODE_ENV=development
9
+ ALLOWED_ORIGIN=http://localhost:3000
@@ -0,0 +1,9 @@
1
+ node_modules/
2
+ dist/
3
+ .manguito/
4
+ .env
5
+ .env.*
6
+ !.env.example
7
+ migrations/
8
+ uploads/
9
+ *.log
@@ -0,0 +1,9 @@
1
+ DB_URL=postgres://user:password@localhost:5432/mydb
2
+
3
+ # Storage
4
+ {{storageAdapter}}
5
+
6
+ AUTH_SECRET=change-me-before-going-to-production
7
+ PORT=3000
8
+ NODE_ENV=development
9
+ ALLOWED_ORIGIN=http://localhost:3000
@@ -0,0 +1,9 @@
1
+ node_modules/
2
+ dist/
3
+ .manguito/
4
+ .env
5
+ .env.*
6
+ !.env.example
7
+ migrations/
8
+ uploads/
9
+ *.log
@@ -0,0 +1,61 @@
1
+ # {{projectName}}
2
+
3
+ A headless CMS project powered by [Manguito CMS](https://github.com/bobbykim89/manguito-cms).
4
+
5
+ ## Getting started
6
+
7
+ 1. Copy `.env.example` to `.env` and fill in your credentials:
8
+
9
+ ```bash
10
+ cp .env.example .env
11
+ ```
12
+
13
+ At minimum, set `DB_URL` and `AUTH_SECRET`.
14
+
15
+ 2. Install dependencies:
16
+
17
+ ```bash
18
+ pnpm install
19
+ ```
20
+
21
+ 3. Start the development server:
22
+
23
+ ```bash
24
+ pnpm dev
25
+ ```
26
+
27
+ The first run auto-migrates the database, seeds system roles, and prompts
28
+ you to create the first admin account.
29
+
30
+ Alternatively, run `pnpm migrate` then `pnpm exec manguito createsuperuser` to set up without starting the dev server.
31
+
32
+ ## Commands
33
+
34
+ | Command | Description |
35
+ | ----------------- | ----------------------------------------------------- |
36
+ | `pnpm dev` | Start dev server with file watching and auto-migration |
37
+ | `pnpm build` | Run codegen and compile to `dist/` |
38
+ | `pnpm start` | Start production server from `dist/` |
39
+ | `pnpm migrate` | Apply pending database migrations |
40
+ | `pnpm validate` | Validate all schemas and config |
41
+
42
+ Other CLI commands (run via `pnpm exec manguito <command>`): `createsuperuser`, `users:promote`, `users:demote`, `migrate:status`.
43
+
44
+ ## Project structure
45
+
46
+ ```
47
+ schemas/
48
+ ├── content-types/ ← Content type schema definitions
49
+ ├── paragraph-types/ ← Reusable paragraph block definitions
50
+ ├── taxonomy-types/ ← Taxonomy (tag/category) definitions
51
+ ├── enum-types/ ← Enum type definitions
52
+ ├── roles.json ← Role hierarchy and permissions
53
+ └── routes.json ← Public API route configuration
54
+
55
+ migrations/ ← Generated database migrations
56
+
57
+ .env.example ← Environment variable template
58
+ manguito.config.ts ← CMS configuration
59
+ ```
60
+
61
+ Full documentation: https://github.com/bobbykim89/manguito-cms#readme
@@ -0,0 +1,38 @@
1
+ import { defineConfig } from '@bobbykim/manguito-cms-core'
2
+ import { createPostgresAdapter } from '@bobbykim/manguito-cms-db'
3
+ import {
4
+ createLocalAdapter,
5
+ createS3Adapter,
6
+ createCloudinaryAdapter,
7
+ } from '@bobbykim/manguito-cms-api/storage'
8
+ import { createServer, createAPIAdapter } from '@bobbykim/manguito-cms-api'
9
+ import { createAdminAdapter } from '@bobbykim/manguito-cms-admin'
10
+
11
+ export default defineConfig({
12
+ name: '{{projectName}}',
13
+
14
+ schema: {
15
+ base_path: './schemas',
16
+ },
17
+
18
+ db: createPostgresAdapter(),
19
+
20
+ migrations: {
21
+ table: '__manguito_migrations',
22
+ folder: './migrations',
23
+ },
24
+
25
+ // Storage — alternatives:
26
+ // createLocalAdapter({ upload_dir: process.env['STORAGE_LOCAL_UPLOAD_DIR'] })
27
+ // createS3Adapter({ bucket: process.env['STORAGE_S3_BUCKET'], region: process.env['STORAGE_S3_REGION'] })
28
+ // createCloudinaryAdapter({ cloud_name: process.env['CLOUDINARY_CLOUD_NAME'], access_key_id: process.env['CLOUDINARY_API_KEY'], secret_access_key: process.env['CLOUDINARY_API_SECRET'] })
29
+ storage: {{storageAdapter}},
30
+
31
+ server: createServer({
32
+ cors: { origin: process.env['ALLOWED_ORIGIN'] ?? '*' },
33
+ }),
34
+
35
+ api: createAPIAdapter({ prefix: '/api' }),
36
+
37
+ admin: createAdminAdapter({ prefix: '/admin' }),
38
+ })
@@ -0,0 +1,23 @@
1
+ {
2
+ "name": "{{projectName}}",
3
+ "version": "0.0.1",
4
+ "private": true,
5
+ "type": "module",
6
+ "scripts": {
7
+ "dev": "manguito dev",
8
+ "build": "manguito build",
9
+ "start": "manguito start",
10
+ "migrate": "manguito migrate",
11
+ "validate": "manguito validate"
12
+ },
13
+ "dependencies": {
14
+ "@bobbykim/manguito-cms-admin": "latest",
15
+ "@bobbykim/manguito-cms-api": "latest",
16
+ "@bobbykim/manguito-cms-cli": "latest",
17
+ "@bobbykim/manguito-cms-core": "latest",
18
+ "@bobbykim/manguito-cms-db": "latest"
19
+ },
20
+ "engines": {
21
+ "node": ">=22.0.0"
22
+ }
23
+ }
@@ -0,0 +1,67 @@
1
+ {
2
+ "name": "content--blog_post",
3
+ "label": "Blog Post",
4
+ "type": "content-type",
5
+ "default_base_path": "posts",
6
+ "only_one": false,
7
+ "fields": [
8
+ {
9
+ "tab": {
10
+ "name": "content",
11
+ "label": "Content",
12
+ "fields": [
13
+ {
14
+ "name": "blog_title",
15
+ "label": "Title",
16
+ "type": "text/plain",
17
+ "required": true
18
+ },
19
+ {
20
+ "name": "blog_slug",
21
+ "label": "Slug",
22
+ "type": "text/plain",
23
+ "required": true
24
+ },
25
+ {
26
+ "name": "blog_hero_image",
27
+ "label": "Hero Image",
28
+ "type": "image",
29
+ "required": false
30
+ },
31
+ {
32
+ "name": "blog_body",
33
+ "label": "Body",
34
+ "type": "text/rich",
35
+ "required": true
36
+ },
37
+ {
38
+ "name": "blog_published",
39
+ "label": "Published",
40
+ "type": "boolean",
41
+ "required": false
42
+ }
43
+ ]
44
+ }
45
+ },
46
+ {
47
+ "tab": {
48
+ "name": "seo",
49
+ "label": "SEO",
50
+ "fields": [
51
+ {
52
+ "name": "blog_meta_title",
53
+ "label": "Meta Title",
54
+ "type": "text/plain",
55
+ "required": false
56
+ },
57
+ {
58
+ "name": "blog_meta_desc",
59
+ "label": "Meta Description",
60
+ "type": "text/plain",
61
+ "required": false
62
+ }
63
+ ]
64
+ }
65
+ }
66
+ ]
67
+ }
@@ -0,0 +1,60 @@
1
+ {
2
+ "roles": [
3
+ {
4
+ "name": "admin",
5
+ "label": "Administrator",
6
+ "is_system": true,
7
+ "hierarchy_level": 0,
8
+ "permissions": [
9
+ "content:read", "content:create", "content:edit", "content:delete",
10
+ "media:read", "media:create", "media:edit", "media:delete",
11
+ "taxonomy:read", "taxonomy:create", "taxonomy:edit", "taxonomy:delete",
12
+ "users:read", "users:create", "users:edit", "users:delete",
13
+ "roles:read"
14
+ ]
15
+ },
16
+ {
17
+ "name": "manager",
18
+ "label": "Manager",
19
+ "is_system": true,
20
+ "hierarchy_level": 1,
21
+ "permissions": [
22
+ "content:read", "content:create", "content:edit", "content:delete",
23
+ "media:read", "media:create", "media:edit", "media:delete",
24
+ "taxonomy:read", "taxonomy:create", "taxonomy:edit", "taxonomy:delete",
25
+ "users:read"
26
+ ]
27
+ },
28
+ {
29
+ "name": "editor",
30
+ "label": "Editor",
31
+ "is_system": true,
32
+ "hierarchy_level": 2,
33
+ "permissions": [
34
+ "content:read", "content:create", "content:edit", "content:delete",
35
+ "media:read", "media:create", "media:edit", "media:delete",
36
+ "taxonomy:read", "taxonomy:create", "taxonomy:edit", "taxonomy:delete"
37
+ ]
38
+ },
39
+ {
40
+ "name": "writer",
41
+ "label": "Writer",
42
+ "is_system": true,
43
+ "hierarchy_level": 3,
44
+ "permissions": [
45
+ "content:read", "content:create",
46
+ "media:read", "media:create"
47
+ ]
48
+ },
49
+ {
50
+ "name": "viewer",
51
+ "label": "Viewer",
52
+ "is_system": true,
53
+ "hierarchy_level": 4,
54
+ "permissions": [
55
+ "content:read",
56
+ "media:read"
57
+ ]
58
+ }
59
+ ]
60
+ }
@@ -0,0 +1,5 @@
1
+ {
2
+ "base_paths": [
3
+ { "name": "posts", "path": "/posts" }
4
+ ]
5
+ }
@@ -0,0 +1,19 @@
1
+ {
2
+ "name": "taxonomy--tag",
3
+ "label": "Tag",
4
+ "type": "taxonomy-type",
5
+ "fields": [
6
+ {
7
+ "name": "tag_name",
8
+ "label": "Name",
9
+ "type": "text/plain",
10
+ "required": true
11
+ },
12
+ {
13
+ "name": "tag_slug",
14
+ "label": "Slug",
15
+ "type": "text/plain",
16
+ "required": true
17
+ }
18
+ ]
19
+ }
@@ -0,0 +1,14 @@
1
+ {
2
+ "$schema": "https://json.schemastore.org/tsconfig",
3
+ "compilerOptions": {
4
+ "target": "ES2022",
5
+ "module": "NodeNext",
6
+ "moduleResolution": "NodeNext",
7
+ "lib": ["ES2022"],
8
+ "strict": true,
9
+ "noUncheckedIndexedAccess": true,
10
+ "skipLibCheck": true,
11
+ "esModuleInterop": true
12
+ },
13
+ "include": ["manguito.config.ts"]
14
+ }
package/package.json ADDED
@@ -0,0 +1,41 @@
1
+ {
2
+ "name": "@bobbykim/manguito-cms-cli",
3
+ "version": "0.1.0",
4
+ "type": "module",
5
+ "bin": {
6
+ "manguito": "./dist/index.js"
7
+ },
8
+ "exports": {
9
+ ".": "./dist/index.js"
10
+ },
11
+ "files": [
12
+ "dist"
13
+ ],
14
+ "engines": {
15
+ "node": ">=22.0.0"
16
+ },
17
+ "dependencies": {
18
+ "@inquirer/prompts": "^7.10.1",
19
+ "commander": "^12.1.0",
20
+ "dotenv": "^16.6.1",
21
+ "tsup": "^8.5.1",
22
+ "vite": "^6.4.3",
23
+ "@bobbykim/manguito-cms-admin": "0.1.0",
24
+ "@bobbykim/manguito-cms-db": "0.1.0",
25
+ "@bobbykim/manguito-cms-core": "0.1.0",
26
+ "@bobbykim/manguito-cms-api": "0.1.0"
27
+ },
28
+ "devDependencies": {
29
+ "@types/node": "^25.9.5",
30
+ "dotenv-cli": "latest",
31
+ "tsup": "^8.5.0",
32
+ "typescript": "^6.0.3",
33
+ "vitest": "^4.1.10"
34
+ },
35
+ "scripts": {
36
+ "build": "tsup",
37
+ "dev": "tsup --watch",
38
+ "test": "dotenv -e .env.test -- vitest run",
39
+ "lint": "eslint src"
40
+ }
41
+ }