create-dql-app 1.4.0 → 1.4.3

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.
Files changed (56) hide show
  1. package/README.md +11 -7
  2. package/bin/create-dql-app.mjs +6 -5
  3. package/package.json +1 -1
  4. package/templates/acme-bank/.dql/skills/mei.chen@acme-bank.com/cards-fraud.skill.md +15 -0
  5. package/templates/acme-bank/.dql/skills/sara.fitch@acme-bank.com/cfo-weekly.skill.md +15 -0
  6. package/templates/acme-bank/README.md +75 -0
  7. package/templates/acme-bank/apps/cards-ops/README.md +9 -0
  8. package/templates/acme-bank/apps/cards-ops/dashboards/daily-ops.dqld +61 -0
  9. package/templates/acme-bank/apps/cards-ops/dashboards/fraud-watch.dqld +37 -0
  10. package/templates/acme-bank/apps/cards-ops/dql.app.json +76 -0
  11. package/templates/acme-bank/apps/cards-ops/drafts/.gitkeep +1 -0
  12. package/templates/acme-bank/apps/cards-ops/notebooks/.gitkeep +1 -0
  13. package/templates/acme-bank/apps/executive-cockpit/README.md +9 -0
  14. package/templates/acme-bank/apps/executive-cockpit/dashboards/bank-overview.dqld +57 -0
  15. package/templates/acme-bank/apps/executive-cockpit/dql.app.json +82 -0
  16. package/templates/acme-bank/apps/executive-cockpit/drafts/.gitkeep +1 -0
  17. package/templates/acme-bank/apps/executive-cockpit/notebooks/.gitkeep +1 -0
  18. package/templates/acme-bank/apps/retail-deposits/README.md +9 -0
  19. package/templates/acme-bank/apps/retail-deposits/dashboards/deposit-growth.dqld +48 -0
  20. package/templates/acme-bank/apps/retail-deposits/dql.app.json +59 -0
  21. package/templates/acme-bank/apps/retail-deposits/drafts/.gitkeep +1 -0
  22. package/templates/acme-bank/apps/retail-deposits/notebooks/.gitkeep +1 -0
  23. package/templates/acme-bank/apps/risk-office/README.md +8 -0
  24. package/templates/acme-bank/apps/risk-office/dashboards/credit-risk.dqld +48 -0
  25. package/templates/acme-bank/apps/risk-office/dql.app.json +57 -0
  26. package/templates/acme-bank/apps/risk-office/drafts/.gitkeep +1 -0
  27. package/templates/acme-bank/apps/risk-office/notebooks/.gitkeep +1 -0
  28. package/templates/acme-bank/blocks/cards/card_approval_rate.dql +24 -0
  29. package/templates/acme-bank/blocks/cards/daily_transaction_volume.dql +34 -0
  30. package/templates/acme-bank/blocks/cards/fraud_alerts_by_region.dql +33 -0
  31. package/templates/acme-bank/blocks/cards/fraud_by_merchant_recent.dql +33 -0
  32. package/templates/acme-bank/blocks/deposits/branch_deposit_leaders.dql +30 -0
  33. package/templates/acme-bank/blocks/deposits/deposit_trend.dql +30 -0
  34. package/templates/acme-bank/blocks/deposits/deposits_by_segment.dql +33 -0
  35. package/templates/acme-bank/blocks/executive/bank_health_scorecard.dql +34 -0
  36. package/templates/acme-bank/blocks/lending/high_risk_loan_exposure.dql +31 -0
  37. package/templates/acme-bank/blocks/lending/loan_delinquency_by_region.dql +32 -0
  38. package/templates/acme-bank/data/customers.csv +12 -0
  39. package/templates/acme-bank/data/deposits.csv +22 -0
  40. package/templates/acme-bank/data/fraud_alerts.csv +9 -0
  41. package/templates/acme-bank/data/loans.csv +11 -0
  42. package/templates/acme-bank/data/merchants.csv +10 -0
  43. package/templates/acme-bank/data/transactions.csv +20 -0
  44. package/templates/acme-bank/dql.config.json +21 -0
  45. package/templates/acme-bank/notebooks/cards_fraud_ops.dqlnb +47 -0
  46. package/templates/acme-bank/notebooks/credit_risk_review.dqlnb +42 -0
  47. package/templates/acme-bank/notebooks/executive_weekly_review.dqlnb +47 -0
  48. package/templates/acme-bank/notebooks/retail_deposits_review.dqlnb +42 -0
  49. package/templates/acme-bank/notebooks/welcome.dqlnb +44 -0
  50. package/templates/acme-bank/package.json +18 -0
  51. package/templates/acme-bank/semantic-layer/dimensions/banking.yaml +36 -0
  52. package/templates/acme-bank/semantic-layer/metrics/banking.yaml +37 -0
  53. package/templates/empty/README.md +4 -3
  54. package/templates/empty/package.json +1 -1
  55. package/templates/jaffle-shop/README.md +1 -1
  56. package/templates/jaffle-shop/package.json +1 -1
package/README.md CHANGED
@@ -3,30 +3,34 @@
3
3
  The fastest way to start a DQL project.
4
4
 
5
5
  ```bash
6
- npx create-dql-app my-analytics
6
+ npx create-dql-app@latest my-analytics
7
7
  cd my-analytics
8
- npx @duckcodeailabs/dql-cli notebook
8
+ npm install
9
+ npm run notebook
9
10
  ```
10
11
 
11
- Opens a running notebook at <http://localhost:5173> in under 5 minutes on a
12
- clean machine. No global install required.
12
+ Opens a running notebook at <http://127.0.0.1:3474> in under 5 minutes on a
13
+ clean machine. No global install required; the template installs
14
+ `@duckcodeailabs/dql-cli` locally and exposes it through npm scripts.
13
15
 
14
16
  ## Templates
15
17
 
16
18
  | Template | What you get |
17
19
  | --- | --- |
18
20
  | `jaffle-shop` *(default)* | DuckDB + the Jaffle Shop dataset + a sample notebook, certified block, and dashboard |
19
- | `empty` | Just a `cdql.yaml` and project layout bring your own warehouse |
21
+ | `acme-bank` | Banking OSS release walkthrough with sample data, certified blocks, sample notebooks, Apps, dashboards, governance, schedules, and agent Skills |
22
+ | `empty` | Just `dql.config.json` and project layout - bring your own warehouse |
20
23
 
21
24
  ```bash
22
- npx create-dql-app finance-reports --template empty
25
+ npx create-dql-app@latest acme-bank --template acme-bank
26
+ npx create-dql-app@latest finance-reports --template empty
23
27
  ```
24
28
 
25
29
  ## Flags
26
30
 
27
31
  | Flag | Default | Meaning |
28
32
  | --- | --- | --- |
29
- | `--template <name>` | `jaffle-shop` | Starter template |
33
+ | `--template <name>` | `jaffle-shop` | Starter template: `jaffle-shop`, `acme-bank`, or `empty` |
30
34
  | `--no-install` | off | Skip downloading the Jaffle Shop seed data |
31
35
 
32
36
  ## Docs
@@ -34,16 +34,17 @@ function usage() {
34
34
  console.log(`create-dql-app ${VERSION}
35
35
 
36
36
  Usage:
37
- npx create-dql-app <project-dir> [options]
37
+ npx create-dql-app@latest <project-dir> [options]
38
38
 
39
39
  Options:
40
- --template <name> Starter template: jaffle-shop (default), empty
40
+ --template <name> Starter template: jaffle-shop (default), acme-bank, empty
41
41
  --help, -h Show this help
42
42
  --version, -v Show version
43
43
 
44
44
  Examples:
45
- npx create-dql-app my-analytics
46
- npx create-dql-app finance-reports --template empty
45
+ npx create-dql-app@latest my-analytics
46
+ npx create-dql-app@latest acme-bank --template acme-bank
47
+ npx create-dql-app@latest finance-reports --template empty
47
48
  `);
48
49
  }
49
50
 
@@ -169,7 +170,7 @@ ${c.green('✓ Ready.')} Next steps:
169
170
  ${c.bold(installCmd)}
170
171
  ${c.bold(runCmd)}${dbtTip}
171
172
 
172
- Your notebook will open at ${c.cyan('http://localhost:5173')}.
173
+ Your notebook will open at ${c.cyan('http://127.0.0.1:3474')}.
173
174
 
174
175
  Docs: ${c.cyan('https://github.com/duckcode-ai/dql')}
175
176
  Issues: ${c.cyan('https://github.com/duckcode-ai/dql/issues')}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "create-dql-app",
3
- "version": "1.4.0",
3
+ "version": "1.4.3",
4
4
  "description": "Scaffold a new DQL project. Run with: npx create-dql-app <name>",
5
5
  "license": "MIT",
6
6
  "author": "DuckCode AI Labs",
@@ -0,0 +1,15 @@
1
+ ---
2
+ id: cards-fraud-daily-ops
3
+ user: mei.chen@acme-bank.com
4
+ description: "Cards fraud analyst skill for Acme Bank daily operations"
5
+ preferred_metrics: [card_volume, fraud_exposure]
6
+ vocabulary:
7
+ "fraud exposure": "block:fraud_alerts_by_region"
8
+ "approval rate": "block:card_approval_rate"
9
+ "merchant fraud": "block:fraud_by_merchant_recent"
10
+ ---
11
+ Mei supports the Cards Operations App. Default to certified cards-domain blocks
12
+ first. Always cite the block id and certification status. When a question asks
13
+ about branch-level fraud, respect persona RLS fields `user.region` and
14
+ `user.branch`.
15
+
@@ -0,0 +1,15 @@
1
+ ---
2
+ id: cfo-weekly-bank-review
3
+ user: sara.fitch@acme-bank.com
4
+ description: "CFO weekly bank health review"
5
+ preferred_metrics: [card_volume, fraud_exposure, deposit_balance, loan_outstanding]
6
+ vocabulary:
7
+ "bank health": "block:bank_health_scorecard"
8
+ "deposit growth": "block:deposit_trend"
9
+ "credit risk": "block:loan_delinquency_by_region"
10
+ ---
11
+ Sara prepares a Monday executive review across cards, fraud, deposits, and
12
+ lending. Prefer the Executive Cockpit App and certified domain blocks. If the
13
+ agent proposes SQL that is not backed by a certified block, flag it as
14
+ uncertified and route it to analyst review.
15
+
@@ -0,0 +1,75 @@
1
+ # {{PROJECT_NAME}}
2
+
3
+ Acme Bank is a runnable end-to-end DQL OSS sample for a single local owner. It
4
+ models how a bank packages certified analytics into domain-specific Apps while
5
+ keeping all source artifacts in git.
6
+
7
+ ## Run
8
+
9
+ ```bash
10
+ npm install
11
+ npm run compile
12
+ npm run app:build
13
+ npm run notebook
14
+ ```
15
+
16
+ The notebook opens the local desktop UI. Click **Apps** to see the packaged
17
+ stakeholder surfaces.
18
+
19
+ ## What is included
20
+
21
+ ```
22
+ data/ small DuckDB-readable CSV warehouse
23
+ blocks/ certified reusable DQL blocks by domain
24
+ apps/ stakeholder Apps with dql.app.json + .dqld dashboards
25
+ notebooks/ analyst notebook walkthrough
26
+ semantic-layer/ starter metric and dimension metadata
27
+ .dql/skills/ agent skills for banking personas
28
+ ```
29
+
30
+ ## Domains
31
+
32
+ | Domain | Business question | Certified blocks |
33
+ | --- | --- | --- |
34
+ | `cards` | Are card operations healthy and where is fraud concentrated? | `daily_transaction_volume`, `card_approval_rate`, `fraud_alerts_by_region`, `fraud_by_merchant_recent` |
35
+ | `deposits` | Are deposits growing by segment and branch? | `deposit_trend`, `deposits_by_segment`, `branch_deposit_leaders` |
36
+ | `lending` | Where is credit risk concentrated? | `loan_delinquency_by_region`, `high_risk_loan_exposure` |
37
+ | `executive` | What should CXO leaders review this week? | `bank_health_scorecard` plus cited domain blocks |
38
+
39
+ ## Apps
40
+
41
+ | App | Audience | Homepage dashboard |
42
+ | --- | --- | --- |
43
+ | `cards-ops` | Head of Cards, fraud analyst, branch manager | `daily-ops` |
44
+ | `retail-deposits` | Retail banking leaders | `deposit-growth` |
45
+ | `risk-office` | Credit and fraud risk committee | `credit-risk` |
46
+ | `executive-cockpit` | CFO/COO weekly review | `bank-overview` |
47
+
48
+ Certified business logic stays in root `blocks/`. App folders contain
49
+ governance, schedules, dashboards, optional notebooks, and `drafts/` for future
50
+ AI-generated work waiting for analyst review.
51
+
52
+ ## Sample notebooks
53
+
54
+ | Notebook | Use case |
55
+ | --- | --- |
56
+ | `notebooks/welcome.dqlnb` | Guided first run across raw SQL and certified blocks |
57
+ | `notebooks/cards_fraud_ops.dqlnb` | Cards volume, approval rate, fraud exposure, merchant watchlist |
58
+ | `notebooks/retail_deposits_review.dqlnb` | Deposit trend, segment balance, branch leaders |
59
+ | `notebooks/credit_risk_review.dqlnb` | Delinquency, probability of default, high-risk exposure |
60
+ | `notebooks/executive_weekly_review.dqlnb` | CXO weekly review across cards, deposits, and lending |
61
+
62
+ ## Useful commands
63
+
64
+ ```bash
65
+ npm run compile # writes dql-manifest.json
66
+ npm run app:build # validates Apps and dashboard references
67
+ npm run agent:reindex # builds the local SQLite/FTS agent knowledge graph
68
+ npm run verify # proves manifest output is reproducible
69
+ ```
70
+
71
+ ## Persona preview
72
+
73
+ Apps are single-user OSS artifacts. There is no login, SSO, or hosted
74
+ multi-tenant behavior. Use the UI persona switcher to preview the real
75
+ PolicyEngine and RLS paths declared in `dql.app.json`.
@@ -0,0 +1,9 @@
1
+ # Cards Operations
2
+
3
+ Audience: Head of Cards, cards analyst, and branch operations leaders.
4
+
5
+ Homepage dashboard: `dashboards/daily-ops.dqld`
6
+
7
+ Certified blocks stay in root `blocks/cards/`. This App declares members,
8
+ policies, RLS bindings, a weekday daily digest, and a high-frequency fraud
9
+ watch schedule in `dql.app.json`.
@@ -0,0 +1,61 @@
1
+ {
2
+ "version": 1,
3
+ "id": "daily-ops",
4
+ "metadata": {
5
+ "title": "Cards Daily Ops",
6
+ "description": "Certified cards operating dashboard for volume, approvals, and fraud exposure.",
7
+ "domain": "cards",
8
+ "tags": ["cards", "fraud", "ops"]
9
+ },
10
+ "filters": [
11
+ { "id": "region", "type": "select", "options": ["NA-NE", "NA-W", "NA-SE", "EMEA"], "bindsTo": "region" }
12
+ ],
13
+ "layout": {
14
+ "kind": "grid",
15
+ "cols": 12,
16
+ "rowHeight": 80,
17
+ "items": [
18
+ {
19
+ "i": "approval-rate",
20
+ "x": 0,
21
+ "y": 0,
22
+ "w": 3,
23
+ "h": 2,
24
+ "block": { "blockId": "card_approval_rate" },
25
+ "viz": { "type": "single_value" },
26
+ "title": "Approval Rate"
27
+ },
28
+ {
29
+ "i": "transaction-volume",
30
+ "x": 3,
31
+ "y": 0,
32
+ "w": 9,
33
+ "h": 3,
34
+ "block": { "blockId": "daily_transaction_volume" },
35
+ "viz": { "type": "line" },
36
+ "title": "Daily Transaction Volume"
37
+ },
38
+ {
39
+ "i": "fraud-region",
40
+ "x": 0,
41
+ "y": 3,
42
+ "w": 6,
43
+ "h": 3,
44
+ "block": { "blockId": "fraud_alerts_by_region" },
45
+ "viz": { "type": "bar" },
46
+ "title": "Fraud Exposure by Region"
47
+ },
48
+ {
49
+ "i": "fraud-merchant",
50
+ "x": 6,
51
+ "y": 3,
52
+ "w": 6,
53
+ "h": 3,
54
+ "block": { "blockId": "fraud_by_merchant_recent" },
55
+ "viz": { "type": "bar" },
56
+ "title": "Fraud by Merchant"
57
+ }
58
+ ]
59
+ }
60
+ }
61
+
@@ -0,0 +1,37 @@
1
+ {
2
+ "version": 1,
3
+ "id": "fraud-watch",
4
+ "metadata": {
5
+ "title": "Fraud Watch",
6
+ "description": "High-frequency card fraud monitoring dashboard for Slack and analyst review.",
7
+ "domain": "cards",
8
+ "tags": ["cards", "fraud", "watchlist"]
9
+ },
10
+ "layout": {
11
+ "kind": "grid",
12
+ "cols": 12,
13
+ "rowHeight": 80,
14
+ "items": [
15
+ {
16
+ "i": "fraud-by-region",
17
+ "x": 0,
18
+ "y": 0,
19
+ "w": 12,
20
+ "h": 3,
21
+ "block": { "blockId": "fraud_alerts_by_region" },
22
+ "viz": { "type": "bar" },
23
+ "title": "Fraud Exposure by Region"
24
+ },
25
+ {
26
+ "i": "fraud-by-merchant",
27
+ "x": 0,
28
+ "y": 3,
29
+ "w": 12,
30
+ "h": 4,
31
+ "block": { "blockId": "fraud_by_merchant_recent" },
32
+ "viz": { "type": "table" },
33
+ "title": "Fraud Exposure by Merchant"
34
+ }
35
+ ]
36
+ }
37
+ }
@@ -0,0 +1,76 @@
1
+ {
2
+ "version": 1,
3
+ "id": "cards-ops",
4
+ "name": "Cards Operations",
5
+ "description": "Daily cards volume, approval health, and fraud monitoring for operations leaders.",
6
+ "domain": "cards",
7
+ "owners": ["raj.kumar@acme-bank.com"],
8
+ "tags": ["cards", "fraud", "daily", "ops", "audience:operations"],
9
+ "members": [
10
+ {
11
+ "userId": "raj.kumar@acme-bank.com",
12
+ "displayName": "Raj Kumar - Head of Cards",
13
+ "roles": ["owner"],
14
+ "attributes": { "department": "cards" }
15
+ },
16
+ {
17
+ "userId": "mei.chen@acme-bank.com",
18
+ "displayName": "Mei Chen - Cards Analyst",
19
+ "roles": ["analyst"],
20
+ "attributes": { "department": "cards" }
21
+ },
22
+ {
23
+ "userId": "li.park@acme-bank.com",
24
+ "displayName": "Li Park - NYC Branch Manager",
25
+ "roles": ["branch_viewer"],
26
+ "attributes": { "region": "NA-NE", "branch": "NYC-042", "department": "cards" }
27
+ }
28
+ ],
29
+ "roles": [
30
+ { "id": "owner", "displayName": "Owner", "description": "Full App configuration and execution." },
31
+ { "id": "analyst", "displayName": "Analyst", "description": "Can execute dashboards and review proposed blocks." },
32
+ { "id": "viewer", "displayName": "Viewer", "description": "Can view and run certified dashboard tiles." },
33
+ { "id": "branch_viewer", "displayName": "Branch Viewer", "description": "Dashboard execution narrowed to the member's region and branch." }
34
+ ],
35
+ "policies": [
36
+ {
37
+ "id": "cards-dashboard-view",
38
+ "domain": "cards",
39
+ "minClassification": "internal",
40
+ "allowedRoles": ["viewer", "branch_viewer", "analyst", "owner"],
41
+ "accessLevel": "execute",
42
+ "enabled": true
43
+ },
44
+ {
45
+ "id": "cards-config-owner",
46
+ "domain": "cards",
47
+ "minClassification": "restricted",
48
+ "allowedRoles": ["owner"],
49
+ "accessLevel": "admin",
50
+ "enabled": true
51
+ }
52
+ ],
53
+ "rlsBindings": [
54
+ { "role": "branch_viewer", "variable": "user.region", "from": "region" },
55
+ { "role": "branch_viewer", "variable": "user.branch", "from": "branch" }
56
+ ],
57
+ "schedules": [
58
+ {
59
+ "id": "daily-7am-digest",
60
+ "cron": "0 7 * * 1-5",
61
+ "dashboard": "daily-ops",
62
+ "deliver": [{ "kind": "slack", "channel": "#cards-ops" }],
63
+ "description": "Weekday cards operations digest.",
64
+ "enabled": true
65
+ },
66
+ {
67
+ "id": "fraud-spike-watch",
68
+ "cron": "*/15 * * * *",
69
+ "dashboard": "fraud-watch",
70
+ "deliver": [{ "kind": "slack", "channel": "#cards-fraud-alerts" }],
71
+ "description": "High-frequency fraud monitoring digest.",
72
+ "enabled": true
73
+ }
74
+ ],
75
+ "homepage": { "type": "dashboard", "id": "daily-ops" }
76
+ }
@@ -0,0 +1,9 @@
1
+ # Executive Cockpit
2
+
3
+ Audience: CFO, COO, and weekly CXO business review.
4
+
5
+ Homepage dashboard: `dashboards/bank-overview.dqld`
6
+
7
+ The App summarizes multiple domains by citing certified blocks instead of
8
+ copying business logic into the App folder.
9
+
@@ -0,0 +1,57 @@
1
+ {
2
+ "version": 1,
3
+ "id": "bank-overview",
4
+ "metadata": {
5
+ "title": "Bank Overview",
6
+ "description": "CXO scorecard that cites certified domain blocks.",
7
+ "domain": "executive",
8
+ "tags": ["executive", "scorecard", "cxo"]
9
+ },
10
+ "layout": {
11
+ "kind": "grid",
12
+ "cols": 12,
13
+ "rowHeight": 80,
14
+ "items": [
15
+ {
16
+ "i": "health-scorecard",
17
+ "x": 0,
18
+ "y": 0,
19
+ "w": 6,
20
+ "h": 4,
21
+ "block": { "blockId": "bank_health_scorecard" },
22
+ "viz": { "type": "table" },
23
+ "title": "Bank Health Scorecard"
24
+ },
25
+ {
26
+ "i": "deposit-trend",
27
+ "x": 6,
28
+ "y": 0,
29
+ "w": 6,
30
+ "h": 3,
31
+ "block": { "blockId": "deposit_trend" },
32
+ "viz": { "type": "line" },
33
+ "title": "Deposit Trend"
34
+ },
35
+ {
36
+ "i": "card-volume",
37
+ "x": 0,
38
+ "y": 4,
39
+ "w": 6,
40
+ "h": 3,
41
+ "block": { "blockId": "daily_transaction_volume" },
42
+ "viz": { "type": "line" },
43
+ "title": "Card Volume"
44
+ },
45
+ {
46
+ "i": "credit-risk",
47
+ "x": 6,
48
+ "y": 4,
49
+ "w": 6,
50
+ "h": 3,
51
+ "block": { "blockId": "loan_delinquency_by_region" },
52
+ "viz": { "type": "bar" },
53
+ "title": "Credit Risk"
54
+ }
55
+ ]
56
+ }
57
+ }
@@ -0,0 +1,82 @@
1
+ {
2
+ "version": 1,
3
+ "id": "executive-cockpit",
4
+ "name": "Executive Cockpit",
5
+ "description": "CXO scorecard that summarizes cards, fraud, deposits, and lending risk.",
6
+ "domain": "executive",
7
+ "owners": ["sara.fitch@acme-bank.com"],
8
+ "tags": ["executive", "cxo", "scorecard", "audience:cxo"],
9
+ "members": [
10
+ {
11
+ "userId": "sara.fitch@acme-bank.com",
12
+ "displayName": "Sara Fitch - CFO",
13
+ "roles": ["owner"],
14
+ "attributes": { "department": "finance" }
15
+ },
16
+ {
17
+ "userId": "nora.evans@acme-bank.com",
18
+ "displayName": "Nora Evans - COO",
19
+ "roles": ["viewer"],
20
+ "attributes": { "department": "operations" }
21
+ }
22
+ ],
23
+ "roles": [
24
+ { "id": "owner", "displayName": "Owner", "description": "Full App configuration and execution." },
25
+ { "id": "analyst", "displayName": "Analyst", "description": "Can execute dashboards and review proposed blocks." },
26
+ { "id": "viewer", "displayName": "Viewer", "description": "Can view and run certified dashboard tiles." }
27
+ ],
28
+ "policies": [
29
+ {
30
+ "id": "executive-dashboard-execute",
31
+ "domain": "executive",
32
+ "minClassification": "internal",
33
+ "allowedRoles": ["viewer", "analyst", "owner"],
34
+ "accessLevel": "execute",
35
+ "enabled": true
36
+ },
37
+ {
38
+ "id": "executive-cards-readthrough",
39
+ "domain": "cards",
40
+ "minClassification": "internal",
41
+ "allowedRoles": ["viewer", "analyst", "owner"],
42
+ "accessLevel": "execute",
43
+ "enabled": true
44
+ },
45
+ {
46
+ "id": "executive-deposits-readthrough",
47
+ "domain": "deposits",
48
+ "minClassification": "internal",
49
+ "allowedRoles": ["viewer", "analyst", "owner"],
50
+ "accessLevel": "execute",
51
+ "enabled": true
52
+ },
53
+ {
54
+ "id": "executive-lending-readthrough",
55
+ "domain": "lending",
56
+ "minClassification": "internal",
57
+ "allowedRoles": ["viewer", "analyst", "owner"],
58
+ "accessLevel": "execute",
59
+ "enabled": true
60
+ },
61
+ {
62
+ "id": "executive-owner-admin",
63
+ "domain": "executive",
64
+ "minClassification": "restricted",
65
+ "allowedRoles": ["owner"],
66
+ "accessLevel": "admin",
67
+ "enabled": true
68
+ }
69
+ ],
70
+ "rlsBindings": [],
71
+ "schedules": [
72
+ {
73
+ "id": "monday-cxo-scorecard",
74
+ "cron": "0 7 * * 1",
75
+ "dashboard": "bank-overview",
76
+ "deliver": [{ "kind": "slack", "channel": "#cxo-weekly" }],
77
+ "description": "Monday morning CXO scorecard.",
78
+ "enabled": true
79
+ }
80
+ ],
81
+ "homepage": { "type": "dashboard", "id": "bank-overview" }
82
+ }
@@ -0,0 +1,9 @@
1
+ # Retail Deposits
2
+
3
+ Audience: retail banking leaders tracking deposit growth and branch leaders.
4
+
5
+ Homepage dashboard: `dashboards/deposit-growth.dqld`
6
+
7
+ Certified blocks stay in root `blocks/deposits/`. This App packages the
8
+ deposit growth dashboard with programmable OSS governance.
9
+
@@ -0,0 +1,48 @@
1
+ {
2
+ "version": 1,
3
+ "id": "deposit-growth",
4
+ "metadata": {
5
+ "title": "Deposit Growth",
6
+ "description": "Certified deposit growth dashboard by segment, branch, and snapshot date.",
7
+ "domain": "deposits",
8
+ "tags": ["deposits", "growth", "retail"]
9
+ },
10
+ "layout": {
11
+ "kind": "grid",
12
+ "cols": 12,
13
+ "rowHeight": 80,
14
+ "items": [
15
+ {
16
+ "i": "deposit-trend",
17
+ "x": 0,
18
+ "y": 0,
19
+ "w": 12,
20
+ "h": 3,
21
+ "block": { "blockId": "deposit_trend" },
22
+ "viz": { "type": "line" },
23
+ "title": "Total Deposit Trend"
24
+ },
25
+ {
26
+ "i": "segment-balance",
27
+ "x": 0,
28
+ "y": 3,
29
+ "w": 6,
30
+ "h": 3,
31
+ "block": { "blockId": "deposits_by_segment" },
32
+ "viz": { "type": "bar" },
33
+ "title": "Deposits by Segment"
34
+ },
35
+ {
36
+ "i": "branch-leaders",
37
+ "x": 6,
38
+ "y": 3,
39
+ "w": 6,
40
+ "h": 4,
41
+ "block": { "blockId": "branch_deposit_leaders" },
42
+ "viz": { "type": "table" },
43
+ "title": "Branch Leaders"
44
+ }
45
+ ]
46
+ }
47
+ }
48
+
@@ -0,0 +1,59 @@
1
+ {
2
+ "version": 1,
3
+ "id": "retail-deposits",
4
+ "name": "Retail Deposits",
5
+ "description": "Deposit growth and branch leaderboard App for retail banking leaders.",
6
+ "domain": "deposits",
7
+ "owners": ["diego.ramos@acme-bank.com"],
8
+ "tags": ["deposits", "retail", "growth", "audience:retail-leaders"],
9
+ "members": [
10
+ {
11
+ "userId": "diego.ramos@acme-bank.com",
12
+ "displayName": "Diego Ramos - Retail Analytics",
13
+ "roles": ["owner", "analyst"],
14
+ "attributes": { "department": "retail" }
15
+ },
16
+ {
17
+ "userId": "nora.evans@acme-bank.com",
18
+ "displayName": "Nora Evans - Retail COO",
19
+ "roles": ["viewer"],
20
+ "attributes": { "department": "retail" }
21
+ }
22
+ ],
23
+ "roles": [
24
+ { "id": "owner", "displayName": "Owner", "description": "Full App configuration and execution." },
25
+ { "id": "analyst", "displayName": "Analyst", "description": "Can execute dashboards and review proposed blocks." },
26
+ { "id": "viewer", "displayName": "Viewer", "description": "Can view and run certified dashboard tiles." }
27
+ ],
28
+ "policies": [
29
+ {
30
+ "id": "deposits-dashboard-view",
31
+ "domain": "deposits",
32
+ "minClassification": "internal",
33
+ "allowedRoles": ["viewer", "analyst", "owner"],
34
+ "accessLevel": "execute",
35
+ "enabled": true
36
+ },
37
+ {
38
+ "id": "deposits-owner-admin",
39
+ "domain": "deposits",
40
+ "minClassification": "restricted",
41
+ "allowedRoles": ["owner"],
42
+ "accessLevel": "admin",
43
+ "enabled": true
44
+ }
45
+ ],
46
+ "rlsBindings": [],
47
+ "schedules": [
48
+ {
49
+ "id": "weekly-deposit-growth",
50
+ "cron": "0 9 * * 1",
51
+ "dashboard": "deposit-growth",
52
+ "deliver": [{ "kind": "slack", "channel": "#retail-deposits" }],
53
+ "description": "Weekly deposits growth digest.",
54
+ "enabled": true
55
+ }
56
+ ],
57
+ "homepage": { "type": "dashboard", "id": "deposit-growth" }
58
+ }
59
+