@manojkmfsi/monodog 1.2.0 → 1.2.2

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.
@@ -4,7 +4,7 @@
4
4
  <meta charset="UTF-8" />
5
5
  <meta name="viewport" content="width=device-width, initial-scale=1.0" />
6
6
  <title>MonoDog Dashboard</title>
7
- <script type="module" crossorigin src="/assets/index-CfZ1i92y.js"></script>
7
+ <script type="module" crossorigin src="/assets/index-9leUZfeE.js"></script>
8
8
  <link rel="stylesheet" crossorigin href="/assets/index-BaDCAFTq.css">
9
9
  </head>
10
10
  <body class="bg-gray-100 text-gray-900">
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@manojkmfsi/monodog",
3
- "version": "1.2.0",
3
+ "version": "1.2.2",
4
4
  "description": "App for monodog monorepo",
5
5
  "license": "MIT",
6
6
  "author": "Mindfiredigital",
@@ -28,6 +28,23 @@
28
28
  "bin": {
29
29
  "monodog": "dist/setup.js"
30
30
  },
31
+ "scripts": {
32
+ "dev": "DATABASE_URL=$(npm run db:url --silent 2>/dev/null | tr -d '\\n') tsx watch src/serve.ts --dev --debug",
33
+ "serve": "DATABASE_URL=$(npm run db:url --silent 2>/dev/null | tr -d '\\n') tsx dist/serve.js",
34
+ "prepublishOnly": "pnpm build",
35
+ "build": "rm -rf dist && tsc",
36
+ "test:coverage": "jest --coverage --silent",
37
+ "prestart": "npm run build",
38
+ "clean": "rm -rf dist node_modules/.cache",
39
+ "lint": "eslint .",
40
+ "lint:fix": "eslint . --fix",
41
+ "db:url": "node dist/get-db-url.js",
42
+ "schema:format": "DATABASE_URL=$(npm run db:url --silent 2>/dev/null | tr -d '\\n') prisma format",
43
+ "schema:validate": "DATABASE_URL=$(npm run db:url --silent 2>/dev/null | tr -d '\\n') prisma validate",
44
+ "generate": "DATABASE_URL=$(npm run db:url --silent 2>/dev/null | tr -d '\\n') prisma generate",
45
+ "migrate": "DATABASE_URL=$(npm run db:url --silent 2>/dev/null | tr -d '\\n') prisma migrate deploy",
46
+ "migrate:reset": "DATABASE_URL=$(npm run db:url --silent 2>/dev/null | tr -d '\\n') prisma migrate reset --force"
47
+ },
31
48
  "keywords": [
32
49
  "monodog",
33
50
  "monorepo",
@@ -91,21 +108,5 @@
91
108
  },
92
109
  "prisma": {
93
110
  "schema": "./prisma/schema"
94
- },
95
- "scripts": {
96
- "dev": "DATABASE_URL=$(npm run db:url --silent 2>/dev/null | tr -d '\\n') tsx watch src/serve.ts --dev --debug",
97
- "serve": "DATABASE_URL=$(npm run db:url --silent 2>/dev/null | tr -d '\\n') tsx dist/serve.js",
98
- "build": "rm -rf dist && tsc",
99
- "test:coverage": "jest --coverage --silent",
100
- "prestart": "npm run build",
101
- "clean": "rm -rf dist node_modules/.cache",
102
- "lint": "eslint .",
103
- "lint:fix": "eslint . --fix",
104
- "db:url": "node dist/get-db-url.js",
105
- "schema:format": "DATABASE_URL=$(npm run db:url --silent 2>/dev/null | tr -d '\\n') prisma format",
106
- "schema:validate": "DATABASE_URL=$(npm run db:url --silent 2>/dev/null | tr -d '\\n') prisma validate",
107
- "generate": "DATABASE_URL=$(npm run db:url --silent 2>/dev/null | tr -d '\\n') prisma generate",
108
- "migrate": "DATABASE_URL=$(npm run db:url --silent 2>/dev/null | tr -d '\\n') prisma migrate deploy",
109
- "migrate:reset": "DATABASE_URL=$(npm run db:url --silent 2>/dev/null | tr -d '\\n') prisma migrate reset --force"
110
111
  }
111
- }
112
+ }
@@ -0,0 +1,162 @@
1
+ -- CreateTable
2
+ CREATE TABLE "ChangeTrack" (
3
+ "id" TEXT NOT NULL PRIMARY KEY,
4
+ "packageName" TEXT NOT NULL,
5
+ "packageVersion" TEXT NOT NULL,
6
+ "detectionMethod" TEXT NOT NULL,
7
+ "detectionTimestamp" DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
8
+ "filesChanged" TEXT NOT NULL,
9
+ "linesAdded" INTEGER NOT NULL DEFAULT 0,
10
+ "linesRemoved" INTEGER NOT NULL DEFAULT 0,
11
+ "changeType" TEXT NOT NULL,
12
+ "affectedDependents" TEXT NOT NULL,
13
+ "userOverrideType" TEXT,
14
+ "overrideReason" TEXT,
15
+ "overrideBy" TEXT,
16
+ "overriddenAt" DATETIME,
17
+ "isReleaseReady" BOOLEAN NOT NULL DEFAULT false,
18
+ "lastAnalyzedCommit" TEXT NOT NULL,
19
+ "previousVersion" TEXT NOT NULL,
20
+ "proposedVersion" TEXT NOT NULL,
21
+ "createdAt" DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
22
+ "updatedAt" DATETIME NOT NULL
23
+ );
24
+
25
+ -- CreateTable
26
+ CREATE TABLE "CommitChange" (
27
+ "id" TEXT NOT NULL PRIMARY KEY,
28
+ "changeTrackId" TEXT NOT NULL,
29
+ "hash" TEXT NOT NULL,
30
+ "message" TEXT NOT NULL,
31
+ "author" TEXT NOT NULL,
32
+ "authorEmail" TEXT,
33
+ "type" TEXT NOT NULL,
34
+ "scope" TEXT,
35
+ "isBreaking" BOOLEAN NOT NULL DEFAULT false,
36
+ "bodyText" TEXT,
37
+ "committedAt" DATETIME NOT NULL,
38
+ "detectedAt" DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
39
+ CONSTRAINT "CommitChange_changeTrackId_fkey" FOREIGN KEY ("changeTrackId") REFERENCES "ChangeTrack" ("id") ON DELETE CASCADE ON UPDATE CASCADE
40
+ );
41
+
42
+ -- CreateTable
43
+ CREATE TABLE "VersionCalculation" (
44
+ "id" TEXT NOT NULL PRIMARY KEY,
45
+ "packageName" TEXT NOT NULL,
46
+ "currentVersion" TEXT NOT NULL,
47
+ "proposedVersion" TEXT NOT NULL,
48
+ "changeType" TEXT NOT NULL,
49
+ "affectedDependents" TEXT NOT NULL,
50
+ "majorBumps" INTEGER NOT NULL DEFAULT 0,
51
+ "minorBumps" INTEGER NOT NULL DEFAULT 0,
52
+ "patchBumps" INTEGER NOT NULL DEFAULT 0,
53
+ "breakingChanges" INTEGER NOT NULL DEFAULT 0,
54
+ "reason" TEXT NOT NULL,
55
+ "createdAt" DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
56
+ "calculatedAt" DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP
57
+ );
58
+
59
+ -- CreateTable
60
+ CREATE TABLE "PublishPipeline" (
61
+ "id" TEXT NOT NULL PRIMARY KEY,
62
+ "packageNames" TEXT NOT NULL,
63
+ "releaseVersion" TEXT,
64
+ "method" TEXT NOT NULL,
65
+ "status" TEXT NOT NULL DEFAULT 'pending',
66
+ "conclusion" TEXT,
67
+ "triggeredBy" TEXT NOT NULL,
68
+ "triggeredAt" DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
69
+ "completedAt" DATETIME,
70
+ "releaseNotes" TEXT,
71
+ "errorMessage" TEXT,
72
+ "errorDetails" TEXT,
73
+ "createdAt" DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
74
+ "updatedAt" DATETIME NOT NULL
75
+ );
76
+
77
+ -- CreateTable
78
+ CREATE TABLE "PublishResult" (
79
+ "id" TEXT NOT NULL PRIMARY KEY,
80
+ "publishPipelineId" TEXT NOT NULL,
81
+ "packageName" TEXT NOT NULL,
82
+ "currentVersion" TEXT NOT NULL,
83
+ "newVersion" TEXT NOT NULL,
84
+ "status" TEXT NOT NULL,
85
+ "result" TEXT,
86
+ "npmPackageId" TEXT,
87
+ "tarballUrl" TEXT,
88
+ "publishedAt" DATETIME,
89
+ "gitTagCreated" TEXT,
90
+ "gitCommitSha" TEXT,
91
+ "gitPushCompleted" BOOLEAN NOT NULL DEFAULT false,
92
+ "githubReleaseUrl" TEXT,
93
+ "error" TEXT,
94
+ "errorDetails" TEXT,
95
+ CONSTRAINT "PublishResult_publishPipelineId_fkey" FOREIGN KEY ("publishPipelineId") REFERENCES "PublishPipeline" ("id") ON DELETE CASCADE ON UPDATE CASCADE
96
+ );
97
+
98
+ -- CreateTable
99
+ CREATE TABLE "TokenUsageLog" (
100
+ "id" TEXT NOT NULL PRIMARY KEY,
101
+ "userId" TEXT NOT NULL,
102
+ "tokenType" TEXT NOT NULL,
103
+ "source" TEXT NOT NULL,
104
+ "operation" TEXT NOT NULL,
105
+ "resourceId" TEXT NOT NULL,
106
+ "success" BOOLEAN NOT NULL,
107
+ "errorMessage" TEXT,
108
+ "timestamp" DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
109
+ "ipAddress" TEXT
110
+ );
111
+
112
+ -- CreateTable
113
+ CREATE TABLE "UserSecret" (
114
+ "id" TEXT NOT NULL PRIMARY KEY,
115
+ "userId" TEXT NOT NULL,
116
+ "secretName" TEXT NOT NULL,
117
+ "secretType" TEXT NOT NULL,
118
+ "encryptedValue" TEXT NOT NULL,
119
+ "encryptionVersion" INTEGER NOT NULL DEFAULT 1,
120
+ "addedAt" DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
121
+ "lastUsedAt" DATETIME,
122
+ "expiresAt" DATETIME
123
+ );
124
+
125
+ -- CreateIndex
126
+ CREATE INDEX "ChangeTrack_packageName_createdAt_idx" ON "ChangeTrack"("packageName", "createdAt");
127
+
128
+ -- CreateIndex
129
+ CREATE INDEX "ChangeTrack_isReleaseReady_packageName_idx" ON "ChangeTrack"("isReleaseReady", "packageName");
130
+
131
+ -- CreateIndex
132
+ CREATE INDEX "CommitChange_changeTrackId_hash_idx" ON "CommitChange"("changeTrackId", "hash");
133
+
134
+ -- CreateIndex
135
+ CREATE INDEX "CommitChange_hash_idx" ON "CommitChange"("hash");
136
+
137
+ -- CreateIndex
138
+ CREATE INDEX "VersionCalculation_packageName_proposedVersion_idx" ON "VersionCalculation"("packageName", "proposedVersion");
139
+
140
+ -- CreateIndex
141
+ CREATE INDEX "PublishPipeline_status_createdAt_idx" ON "PublishPipeline"("status", "createdAt");
142
+
143
+ -- CreateIndex
144
+ CREATE INDEX "PublishPipeline_triggeredBy_createdAt_idx" ON "PublishPipeline"("triggeredBy", "createdAt");
145
+
146
+ -- CreateIndex
147
+ CREATE INDEX "PublishResult_publishPipelineId_idx" ON "PublishResult"("publishPipelineId");
148
+
149
+ -- CreateIndex
150
+ CREATE INDEX "PublishResult_packageName_newVersion_idx" ON "PublishResult"("packageName", "newVersion");
151
+
152
+ -- CreateIndex
153
+ CREATE INDEX "TokenUsageLog_userId_timestamp_idx" ON "TokenUsageLog"("userId", "timestamp");
154
+
155
+ -- CreateIndex
156
+ CREATE INDEX "TokenUsageLog_tokenType_timestamp_idx" ON "TokenUsageLog"("tokenType", "timestamp");
157
+
158
+ -- CreateIndex
159
+ CREATE INDEX "UserSecret_userId_idx" ON "UserSecret"("userId");
160
+
161
+ -- CreateIndex
162
+ CREATE UNIQUE INDEX "UserSecret_userId_secretName_key" ON "UserSecret"("userId", "secretName");
@@ -1,48 +1,44 @@
1
- /**
2
- * Change Tracking Schema
3
- * Tracks detected changes in packages for independent versioning
4
- * Replaces dependency on Changesets .changeset/*.md files
5
- */
1
+
6
2
 
7
3
  model ChangeTrack {
8
4
  id String @id @default(cuid())
9
-
5
+
10
6
  // Package identification
11
- packageName String @index
7
+ packageName String
12
8
  packageVersion String
13
-
9
+
14
10
  // Change detection
15
- detectionMethod DetectionMethod
11
+ detectionMethod String // was enum DetectionMethod
16
12
  detectionTimestamp DateTime @default(now())
17
-
13
+
18
14
  // Commit-based detection
19
15
  commits CommitChange[]
20
-
16
+
21
17
  // File change analysis
22
- filesChanged String[]
18
+ filesChanged String // JSON stringified array, was String[]
23
19
  linesAdded Int @default(0)
24
20
  linesRemoved Int @default(0)
25
-
21
+
26
22
  // Change type determination
27
- changeType ChangeType
28
- affectedDependents String[]
29
-
23
+ changeType String // was enum ChangeType
24
+ affectedDependents String // JSON stringified array, was String[]
25
+
30
26
  // Manual override support
31
- userOverrideType ChangeType?
27
+ userOverrideType String? // was enum ChangeType
32
28
  overrideReason String?
33
29
  overrideBy String?
34
30
  overriddenAt DateTime?
35
-
31
+
36
32
  // Release readiness
37
33
  isReleaseReady Boolean @default(false)
38
34
  lastAnalyzedCommit String
39
35
  previousVersion String
40
36
  proposedVersion String
41
-
37
+
42
38
  // Metadata
43
39
  createdAt DateTime @default(now())
44
40
  updatedAt DateTime @updatedAt
45
-
41
+
46
42
  @@index([packageName, createdAt])
47
43
  @@index([isReleaseReady, packageName])
48
44
  }
@@ -51,78 +47,52 @@ model CommitChange {
51
47
  id String @id @default(cuid())
52
48
  changeTrackId String
53
49
  changeTrack ChangeTrack @relation(fields: [changeTrackId], references: [id], onDelete: Cascade)
54
-
50
+
55
51
  // Commit details
56
52
  hash String
57
53
  message String
58
54
  author String
59
55
  authorEmail String?
60
-
56
+
61
57
  // Conventional commit parsing
62
- type ConventionalType
58
+ type String // was enum ConventionalType
63
59
  scope String?
64
60
  isBreaking Boolean @default(false)
65
61
  bodyText String?
66
-
62
+
67
63
  // Timestamps
68
64
  committedAt DateTime
69
65
  detectedAt DateTime @default(now())
70
-
66
+
71
67
  @@index([changeTrackId, hash])
72
68
  @@index([hash])
73
69
  }
74
70
 
75
71
  model VersionCalculation {
76
72
  id String @id @default(cuid())
77
-
73
+
78
74
  packageName String
79
75
  currentVersion String
80
76
  proposedVersion String
81
-
77
+
82
78
  // Components of calculation
83
- changeType ChangeType
84
- affectedDependents String[]
85
-
79
+ changeType String // was enum ChangeType
80
+ affectedDependents String // JSON stringified array, was String[]
81
+
86
82
  // Calculation details
87
83
  majorBumps Int @default(0)
88
84
  minorBumps Int @default(0)
89
85
  patchBumps Int @default(0)
90
86
  breakingChanges Int @default(0)
91
-
87
+
92
88
  // Reason tracking
93
89
  reason String // Human-readable explanation
94
-
90
+
95
91
  // Metadata
96
92
  createdAt DateTime @default(now())
97
93
  calculatedAt DateTime @default(now())
98
-
99
- @@index([packageName, proposedVersion])
100
- }
101
94
 
102
- enum DetectionMethod {
103
- commit // Conventional commits
104
- diff // Git diff analysis
105
- manual // User-provided
106
- hybrid // Combined approach
95
+ @@index([packageName, proposedVersion])
107
96
  }
108
97
 
109
- enum ChangeType {
110
- major // Breaking change
111
- minor // New feature
112
- patch // Bug fix
113
- none // No release needed
114
- }
115
98
 
116
- enum ConventionalType {
117
- feat // feat: New feature (minor)
118
- fix // fix: Bug fix (patch)
119
- docs // docs: Documentation
120
- style // style: Code style
121
- refactor // refactor: Refactoring
122
- test // test: Tests
123
- chore // chore: Maintenance
124
- perf // perf: Performance
125
- ci // ci: CI/CD changes
126
- revert // revert: Reverts a commit
127
- build // build: Build system
128
- }
Binary file
@@ -1,40 +1,35 @@
1
- /**
2
- * Publish Pipeline Schema
3
- * Tracks the independent publishing process without GitHub Actions
4
- * Supports hybrid execution (Node.js or GitHub Actions)
5
- */
6
1
 
7
2
  model PublishPipeline {
8
3
  id String @id @default(cuid())
9
-
4
+
10
5
  // Pipeline identification
11
- packageNames String[]
6
+ packageNames String // JSON stringified array, was String[]
12
7
  releaseVersion String?
13
-
8
+
14
9
  // Execution method
15
- method PublishMethod // 'node' or 'github-actions'
16
- status PublishStatus @default(pending)
17
- conclusion PublishConclusion?
18
-
10
+ method String // was enum PublishMethod
11
+ status String @default("pending") // was enum PublishStatus
12
+ conclusion String? // was enum PublishConclusion
13
+
19
14
  // Audit trail
20
15
  triggeredBy String // User ID
21
16
  triggeredAt DateTime @default(now())
22
17
  completedAt DateTime?
23
-
18
+
24
19
  // Release notes
25
20
  releaseNotes String?
26
-
21
+
27
22
  // Progress tracking
28
23
  packageResults PublishResult[]
29
-
24
+
30
25
  // Error handling
31
26
  errorMessage String?
32
27
  errorDetails String?
33
-
28
+
34
29
  // Metadata
35
30
  createdAt DateTime @default(now())
36
31
  updatedAt DateTime @updatedAt
37
-
32
+
38
33
  @@index([status, createdAt])
39
34
  @@index([triggeredBy, createdAt])
40
35
  }
@@ -43,137 +38,82 @@ model PublishResult {
43
38
  id String @id @default(cuid())
44
39
  publishPipelineId String
45
40
  publishPipeline PublishPipeline @relation(fields: [publishPipelineId], references: [id], onDelete: Cascade)
46
-
41
+
47
42
  // Package info
48
43
  packageName String
49
44
  currentVersion String
50
45
  newVersion String
51
-
46
+
52
47
  // Publishing result
53
- status PublishStatus
54
- result PublishResultType?
55
-
48
+ status String // was enum PublishStatus
49
+ result String? // was enum PublishResultType
50
+
56
51
  // npm details
57
52
  npmPackageId String? // @scope/name@1.2.3
58
53
  tarballUrl String?
59
54
  publishedAt DateTime?
60
-
55
+
61
56
  // Git details
62
57
  gitTagCreated String? // Git tag name
63
58
  gitCommitSha String?
64
59
  gitPushCompleted Boolean @default(false)
65
-
60
+
66
61
  // GitHub Release
67
62
  githubReleaseUrl String?
68
-
63
+
69
64
  // Errors
70
65
  error String?
71
66
  errorDetails String?
72
-
67
+
73
68
  @@index([publishPipelineId])
74
69
  @@index([packageName, newVersion])
75
70
  }
76
71
 
77
72
  model TokenUsageLog {
78
73
  id String @id @default(cuid())
79
-
74
+
80
75
  // User context
81
76
  userId String
82
-
77
+
83
78
  // Token type
84
- tokenType TokenType
85
- source TokenSource // 'env', 'user', 'oauth'
86
-
79
+ tokenType String // was enum TokenType
80
+ source String // was enum TokenSource
81
+
87
82
  // Operation details
88
- operation TokenOperation
83
+ operation String // was enum TokenOperation
89
84
  resourceId String // Package name or repo
90
-
85
+
91
86
  // Result
92
87
  success Boolean
93
88
  errorMessage String?
94
-
89
+
95
90
  // Security
96
91
  timestamp DateTime @default(now())
97
92
  ipAddress String?
98
-
93
+
99
94
  @@index([userId, timestamp])
100
95
  @@index([tokenType, timestamp])
101
96
  }
102
97
 
103
98
  model UserSecret {
104
99
  id String @id @default(cuid())
105
- userId String @index
106
-
100
+ userId String
101
+
107
102
  // Secret metadata
108
103
  secretName String // 'npm_token', 'github_token'
109
- secretType SecretType
110
-
104
+ secretType String // was enum SecretType
105
+
111
106
  // Encrypted value (never store plaintext)
112
107
  encryptedValue String
113
108
  encryptionVersion Int @default(1)
114
-
109
+
115
110
  // Metadata
116
111
  addedAt DateTime @default(now())
117
112
  lastUsedAt DateTime?
118
113
  expiresAt DateTime?
119
-
114
+
120
115
  @@unique([userId, secretName])
121
116
  @@index([userId])
122
117
  }
123
118
 
124
- enum PublishMethod {
125
- node
126
- github_actions
127
- hybrid
128
- }
129
-
130
- enum PublishStatus {
131
- pending // Waiting to start
132
- preparing // Preparing versions and changelogs
133
- publishing // Publishing to npm
134
- tagging // Creating git tags
135
- pushing // Pushing to GitHub
136
- releasing // Creating GitHub releases
137
- completed // Done successfully
138
- failed // Failed at some point
139
- cancelled // User cancelled
140
- }
141
-
142
- enum PublishConclusion {
143
- success
144
- failure
145
- cancelled
146
- partial
147
- }
148
119
 
149
- enum PublishResultType {
150
- published
151
- skipped
152
- error
153
- }
154
-
155
- enum TokenType {
156
- npm
157
- github
158
- git
159
- }
160
-
161
- enum TokenSource {
162
- env // Environment variable
163
- user // User-provided secret
164
- oauth // OAuth session
165
- }
166
-
167
- enum TokenOperation {
168
- publish
169
- tag
170
- release
171
- commit
172
- push
173
- }
174
-
175
- enum SecretType {
176
- npm_token
177
- github_token
178
- github_oauth
179
- }
@@ -1,58 +0,0 @@
1
- # Monodog: Monorepo Health Dashboard (Frontend)
2
-
3
- ## 🎯 Overview
4
-
5
- This is the **client-side application** designed to consume data from the **Monorepo Analytics and Health API** backend service.
6
- It provides a **real-time, visual dashboard** for tracking the health, dependencies, and overall status of all packages within the monorepo.
7
-
8
- ---
9
-
10
- ## 🛠 Technology Stack
11
-
12
- | Component | Technology | Description |
13
- | ----------------- | ----------------------------- | --------------------------------------------------------------------- |
14
- | **Framework** | React (Functional Components) | Core library for building the user interface. |
15
- | **Styling** | Tailwind CSS | Utility-first framework for responsive, modern, and aesthetic design. |
16
- | **Data Fetching** | Fetch API (Native JavaScript) | Handles communication with the backend Express API. |
17
- | **Icons** | Lucide React | Simple, clean vector icons for visualization. |
18
-
19
- ---
20
-
21
- ## ⚙️ Prerequisites
22
-
23
- To run this application, ensure the following:
24
-
25
- - **Node.js** and a package manager (`npm`, `yarn`, or `pnpm`) are installed.
26
- - The **Monorepo Analytics API** backend service is running and accessible.
27
- - Default backend URL: **http://localhost:8999**
28
-
29
- ---
30
-
31
- ## API Connection Details
32
-
33
- The dashboard connects to the backend API using the following base URL:
34
-
35
- ```javascript
36
- const API_BASE_URL = 'http://localhost:8999/api';
37
- ```
38
-
39
- ## Getting Started
40
-
41
- ### Installation
42
-
43
- Clone the repository and install the dependencies:
44
-
45
- ```bash
46
- # Clone the repository
47
- git clone https://github.com/mindfiredigital/MonoDog.git
48
- cd packages/monoapp/monodog-dashboard
49
-
50
- # Install dependencies
51
- npm install
52
-
53
- # build
54
- npm run build
55
-
56
- # run dashboard
57
- npm run dev
58
- ```