create-meridian-app 0.1.21 → 0.1.23

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.
@@ -17,7 +17,7 @@ function renderPackageJson(vars) {
17
17
  scripts: {
18
18
  dev: "meridian dev",
19
19
  build: "meridian build",
20
- start: "node --import tsx/esm src/main.ts",
20
+ start: "meridian dev",
21
21
  "db:migrate": "meridian db:migrate",
22
22
  "db:generate": "meridian db:generate",
23
23
  ...vars.seedDemo ? { "seed:demo": "node --import tsx/esm src/scripts/seed-demo.ts" } : {}
@@ -266,6 +266,7 @@ DATABASE_URL=${vars.databaseUrl}
266
266
  PORT=${vars.httpPort}
267
267
  JWT_SECRET=changeme-replace-in-production
268
268
  ${vars.dashboard ? `DASHBOARD_PORT=${vars.dashboardPort}
269
+ # API_URL=https://api.yourdomain.com # set this in production
269
270
  ` : ""}${optionalEnv}`.trimEnd() + "\n";
270
271
  }
271
272
  function renderReadme(vars) {
@@ -573,6 +574,7 @@ async function main() {
573
574
  await seedStatuses(siteProject.id)
574
575
  const siteSprint = await sprintService.createSprint({
575
576
  project_id: siteProject.id,
577
+ workspace_id: acme.id,
576
578
  name: "Sprint 1",
577
579
  start_date: now,
578
580
  end_date: future(14),
@@ -581,6 +583,7 @@ async function main() {
581
583
 
582
584
  const siteHero = await issueService.createIssueInProject({
583
585
  project_id: siteProject.id,
586
+ workspace_id: acme.id,
584
587
  title: "Redesign homepage hero section",
585
588
  type: "feature",
586
589
  priority: "high",
@@ -589,6 +592,7 @@ async function main() {
589
592
  })
590
593
  await issueService.createIssueInProject({
591
594
  project_id: siteProject.id,
595
+ workspace_id: acme.id,
592
596
  title: "Design hero animation",
593
597
  type: "task",
594
598
  priority: "medium",
@@ -597,6 +601,7 @@ async function main() {
597
601
  })
598
602
  await issueService.createIssueInProject({
599
603
  project_id: siteProject.id,
604
+ workspace_id: acme.id,
600
605
  title: "Write hero copy",
601
606
  type: "task",
602
607
  priority: "low",
@@ -605,6 +610,7 @@ async function main() {
605
610
  })
606
611
  await issueService.createIssueInProject({
607
612
  project_id: siteProject.id,
613
+ workspace_id: acme.id,
608
614
  title: "Fix broken navigation links",
609
615
  type: "bug",
610
616
  priority: "urgent",
@@ -612,6 +618,7 @@ async function main() {
612
618
  })
613
619
  await issueService.createIssueInProject({
614
620
  project_id: siteProject.id,
621
+ workspace_id: acme.id,
615
622
  title: "Implement contact form",
616
623
  type: "feature",
617
624
  priority: "medium",
@@ -619,6 +626,7 @@ async function main() {
619
626
  })
620
627
  await issueService.createIssueInProject({
621
628
  project_id: siteProject.id,
629
+ workspace_id: acme.id,
622
630
  title: "Optimize images for web",
623
631
  type: "task",
624
632
  priority: "low",
@@ -626,6 +634,7 @@ async function main() {
626
634
  })
627
635
  await issueService.createIssueInProject({
628
636
  project_id: siteProject.id,
637
+ workspace_id: acme.id,
629
638
  title: "Add SEO meta tags",
630
639
  type: "task",
631
640
  priority: "medium",
@@ -633,6 +642,7 @@ async function main() {
633
642
  })
634
643
  await issueService.createIssueInProject({
635
644
  project_id: siteProject.id,
645
+ workspace_id: acme.id,
636
646
  title: "Set up Google Analytics",
637
647
  type: "task",
638
648
  priority: "high",
@@ -652,6 +662,7 @@ async function main() {
652
662
  await seedStatuses(appProject.id)
653
663
  const appSprint = await sprintService.createSprint({
654
664
  project_id: appProject.id,
665
+ workspace_id: acme.id,
655
666
  name: "Sprint 1",
656
667
  start_date: now,
657
668
  end_date: future(14),
@@ -660,6 +671,7 @@ async function main() {
660
671
 
661
672
  const appPush = await issueService.createIssueInProject({
662
673
  project_id: appProject.id,
674
+ workspace_id: acme.id,
663
675
  title: "Implement push notifications",
664
676
  type: "feature",
665
677
  priority: "high",
@@ -668,6 +680,7 @@ async function main() {
668
680
  })
669
681
  await issueService.createIssueInProject({
670
682
  project_id: appProject.id,
683
+ workspace_id: acme.id,
671
684
  title: "iOS push setup",
672
685
  type: "task",
673
686
  priority: "medium",
@@ -676,6 +689,7 @@ async function main() {
676
689
  })
677
690
  await issueService.createIssueInProject({
678
691
  project_id: appProject.id,
692
+ workspace_id: acme.id,
679
693
  title: "Android push setup",
680
694
  type: "task",
681
695
  priority: "medium",
@@ -684,6 +698,7 @@ async function main() {
684
698
  })
685
699
  const appCrash = await issueService.createIssueInProject({
686
700
  project_id: appProject.id,
701
+ workspace_id: acme.id,
687
702
  title: "Fix crash on login screen",
688
703
  type: "bug",
689
704
  priority: "urgent",
@@ -691,6 +706,7 @@ async function main() {
691
706
  })
692
707
  await issueService.createIssueInProject({
693
708
  project_id: appProject.id,
709
+ workspace_id: acme.id,
694
710
  title: "Add dark mode support",
695
711
  type: "feature",
696
712
  priority: "medium",
@@ -698,6 +714,7 @@ async function main() {
698
714
  })
699
715
  await issueService.createIssueInProject({
700
716
  project_id: appProject.id,
717
+ workspace_id: acme.id,
701
718
  title: "Improve app launch time",
702
719
  type: "task",
703
720
  priority: "high",
@@ -705,6 +722,7 @@ async function main() {
705
722
  })
706
723
  await issueService.createIssueInProject({
707
724
  project_id: appProject.id,
725
+ workspace_id: acme.id,
708
726
  title: "Write onboarding flow",
709
727
  type: "story",
710
728
  priority: "medium",
@@ -712,6 +730,7 @@ async function main() {
712
730
  })
713
731
  await issueService.createIssueInProject({
714
732
  project_id: appProject.id,
733
+ workspace_id: acme.id,
715
734
  title: "Accessibility audit",
716
735
  type: "task",
717
736
  priority: "low",
@@ -735,6 +754,7 @@ async function main() {
735
754
  await seedStatuses(roadmapProject.id)
736
755
  const roadmapSprint = await sprintService.createSprint({
737
756
  project_id: roadmapProject.id,
757
+ workspace_id: starlight.id,
738
758
  name: "Sprint 1",
739
759
  start_date: now,
740
760
  end_date: future(21),
@@ -743,6 +763,7 @@ async function main() {
743
763
 
744
764
  const roadmapOkr = await issueService.createIssueInProject({
745
765
  project_id: roadmapProject.id,
766
+ workspace_id: starlight.id,
746
767
  title: "Define Q2 OKRs",
747
768
  type: "epic",
748
769
  priority: "high",
@@ -751,6 +772,7 @@ async function main() {
751
772
  })
752
773
  await issueService.createIssueInProject({
753
774
  project_id: roadmapProject.id,
775
+ workspace_id: starlight.id,
754
776
  title: "Engineering OKRs",
755
777
  type: "task",
756
778
  priority: "high",
@@ -759,6 +781,7 @@ async function main() {
759
781
  })
760
782
  await issueService.createIssueInProject({
761
783
  project_id: roadmapProject.id,
784
+ workspace_id: starlight.id,
762
785
  title: "Product OKRs",
763
786
  type: "task",
764
787
  priority: "high",
@@ -767,6 +790,7 @@ async function main() {
767
790
  })
768
791
  await issueService.createIssueInProject({
769
792
  project_id: roadmapProject.id,
793
+ workspace_id: starlight.id,
770
794
  title: "User research interviews",
771
795
  type: "task",
772
796
  priority: "medium",
@@ -774,6 +798,7 @@ async function main() {
774
798
  })
775
799
  await issueService.createIssueInProject({
776
800
  project_id: roadmapProject.id,
801
+ workspace_id: starlight.id,
777
802
  title: "Competitive analysis",
778
803
  type: "task",
779
804
  priority: "medium",
@@ -781,6 +806,7 @@ async function main() {
781
806
  })
782
807
  await issueService.createIssueInProject({
783
808
  project_id: roadmapProject.id,
809
+ workspace_id: starlight.id,
784
810
  title: "Draft product spec v1",
785
811
  type: "feature",
786
812
  priority: "high",
@@ -788,6 +814,7 @@ async function main() {
788
814
  })
789
815
  await issueService.createIssueInProject({
790
816
  project_id: roadmapProject.id,
817
+ workspace_id: starlight.id,
791
818
  title: "Roadmap review with stakeholders",
792
819
  type: "task",
793
820
  priority: "medium",
@@ -795,6 +822,7 @@ async function main() {
795
822
  })
796
823
  await issueService.createIssueInProject({
797
824
  project_id: roadmapProject.id,
825
+ workspace_id: starlight.id,
798
826
  title: "Prioritize feature backlog",
799
827
  type: "task",
800
828
  priority: "low",
@@ -814,6 +842,7 @@ async function main() {
814
842
  await seedStatuses(mktProject.id)
815
843
  const mktSprint = await sprintService.createSprint({
816
844
  project_id: mktProject.id,
845
+ workspace_id: starlight.id,
817
846
  name: "Sprint 1",
818
847
  start_date: now,
819
848
  end_date: future(7),
@@ -822,6 +851,7 @@ async function main() {
822
851
 
823
852
  const mktPricing = await issueService.createIssueInProject({
824
853
  project_id: mktProject.id,
854
+ workspace_id: starlight.id,
825
855
  title: "Redesign pricing page",
826
856
  type: "feature",
827
857
  priority: "high",
@@ -830,6 +860,7 @@ async function main() {
830
860
  })
831
861
  await issueService.createIssueInProject({
832
862
  project_id: mktProject.id,
863
+ workspace_id: starlight.id,
833
864
  title: "Update pricing copy",
834
865
  type: "task",
835
866
  priority: "medium",
@@ -838,6 +869,7 @@ async function main() {
838
869
  })
839
870
  await issueService.createIssueInProject({
840
871
  project_id: mktProject.id,
872
+ workspace_id: starlight.id,
841
873
  title: "A/B test variants",
842
874
  type: "task",
843
875
  priority: "low",
@@ -846,6 +878,7 @@ async function main() {
846
878
  })
847
879
  await issueService.createIssueInProject({
848
880
  project_id: mktProject.id,
881
+ workspace_id: starlight.id,
849
882
  title: "Fix mobile layout issues",
850
883
  type: "bug",
851
884
  priority: "urgent",
@@ -853,6 +886,7 @@ async function main() {
853
886
  })
854
887
  await issueService.createIssueInProject({
855
888
  project_id: mktProject.id,
889
+ workspace_id: starlight.id,
856
890
  title: "Improve page load score",
857
891
  type: "task",
858
892
  priority: "high",
@@ -860,6 +894,7 @@ async function main() {
860
894
  })
861
895
  await issueService.createIssueInProject({
862
896
  project_id: mktProject.id,
897
+ workspace_id: starlight.id,
863
898
  title: "Add blog section",
864
899
  type: "feature",
865
900
  priority: "medium",
@@ -867,6 +902,7 @@ async function main() {
867
902
  })
868
903
  await issueService.createIssueInProject({
869
904
  project_id: mktProject.id,
905
+ workspace_id: starlight.id,
870
906
  title: "Set up Hotjar",
871
907
  type: "task",
872
908
  priority: "low",
@@ -874,6 +910,7 @@ async function main() {
874
910
  })
875
911
  await issueService.createIssueInProject({
876
912
  project_id: mktProject.id,
913
+ workspace_id: starlight.id,
877
914
  title: "Write 3 launch blog posts",
878
915
  type: "task",
879
916
  priority: "medium",
@@ -897,6 +934,7 @@ async function main() {
897
934
  await seedStatuses(infraProject.id)
898
935
  const infraSprint = await sprintService.createSprint({
899
936
  project_id: infraProject.id,
937
+ workspace_id: devops.id,
900
938
  name: "Sprint 1",
901
939
  start_date: now,
902
940
  end_date: future(14),
@@ -905,6 +943,7 @@ async function main() {
905
943
 
906
944
  const infraEks = await issueService.createIssueInProject({
907
945
  project_id: infraProject.id,
946
+ workspace_id: devops.id,
908
947
  title: "Migrate to EKS",
909
948
  type: "epic",
910
949
  priority: "high",
@@ -913,6 +952,7 @@ async function main() {
913
952
  })
914
953
  await issueService.createIssueInProject({
915
954
  project_id: infraProject.id,
955
+ workspace_id: devops.id,
916
956
  title: "Set up EKS cluster",
917
957
  type: "task",
918
958
  priority: "high",
@@ -921,6 +961,7 @@ async function main() {
921
961
  })
922
962
  await issueService.createIssueInProject({
923
963
  project_id: infraProject.id,
964
+ workspace_id: devops.id,
924
965
  title: "Migrate services",
925
966
  type: "task",
926
967
  priority: "high",
@@ -929,6 +970,7 @@ async function main() {
929
970
  })
930
971
  await issueService.createIssueInProject({
931
972
  project_id: infraProject.id,
973
+ workspace_id: devops.id,
932
974
  title: "Implement secrets rotation",
933
975
  type: "feature",
934
976
  priority: "urgent",
@@ -936,6 +978,7 @@ async function main() {
936
978
  })
937
979
  await issueService.createIssueInProject({
938
980
  project_id: infraProject.id,
981
+ workspace_id: devops.id,
939
982
  title: "Add CloudWatch dashboards",
940
983
  type: "task",
941
984
  priority: "medium",
@@ -943,6 +986,7 @@ async function main() {
943
986
  })
944
987
  await issueService.createIssueInProject({
945
988
  project_id: infraProject.id,
989
+ workspace_id: devops.id,
946
990
  title: "Reduce AWS costs by 20%",
947
991
  type: "task",
948
992
  priority: "high",
@@ -950,6 +994,7 @@ async function main() {
950
994
  })
951
995
  await issueService.createIssueInProject({
952
996
  project_id: infraProject.id,
997
+ workspace_id: devops.id,
953
998
  title: "Set up Datadog APM",
954
999
  type: "feature",
955
1000
  priority: "medium",
@@ -958,6 +1003,7 @@ async function main() {
958
1003
  })
959
1004
  await issueService.createIssueInProject({
960
1005
  project_id: infraProject.id,
1006
+ workspace_id: devops.id,
961
1007
  title: "Document runbooks",
962
1008
  type: "task",
963
1009
  priority: "low",
@@ -976,6 +1022,7 @@ async function main() {
976
1022
  await seedStatuses(cicdProject.id)
977
1023
  const cicdSprint = await sprintService.createSprint({
978
1024
  project_id: cicdProject.id,
1025
+ workspace_id: devops.id,
979
1026
  name: "Sprint 1",
980
1027
  start_date: now,
981
1028
  end_date: future(14),
@@ -984,6 +1031,7 @@ async function main() {
984
1031
 
985
1032
  const cicdMatrix = await issueService.createIssueInProject({
986
1033
  project_id: cicdProject.id,
1034
+ workspace_id: devops.id,
987
1035
  title: "Add matrix builds for Node 18/20",
988
1036
  type: "feature",
989
1037
  priority: "high",
@@ -992,6 +1040,7 @@ async function main() {
992
1040
  })
993
1041
  await issueService.createIssueInProject({
994
1042
  project_id: cicdProject.id,
1043
+ workspace_id: devops.id,
995
1044
  title: "Node 18 build config",
996
1045
  type: "task",
997
1046
  priority: "medium",
@@ -1000,6 +1049,7 @@ async function main() {
1000
1049
  })
1001
1050
  await issueService.createIssueInProject({
1002
1051
  project_id: cicdProject.id,
1052
+ workspace_id: devops.id,
1003
1053
  title: "Node 20 build config",
1004
1054
  type: "task",
1005
1055
  priority: "medium",
@@ -1008,6 +1058,7 @@ async function main() {
1008
1058
  })
1009
1059
  await issueService.createIssueInProject({
1010
1060
  project_id: cicdProject.id,
1061
+ workspace_id: devops.id,
1011
1062
  title: "Flaky test investigation",
1012
1063
  type: "bug",
1013
1064
  priority: "high",
@@ -1015,6 +1066,7 @@ async function main() {
1015
1066
  })
1016
1067
  await issueService.createIssueInProject({
1017
1068
  project_id: cicdProject.id,
1069
+ workspace_id: devops.id,
1018
1070
  title: "Add deploy preview environments",
1019
1071
  type: "feature",
1020
1072
  priority: "medium",
@@ -1022,6 +1074,7 @@ async function main() {
1022
1074
  })
1023
1075
  await issueService.createIssueInProject({
1024
1076
  project_id: cicdProject.id,
1077
+ workspace_id: devops.id,
1025
1078
  title: "Cache npm dependencies",
1026
1079
  type: "task",
1027
1080
  priority: "medium",
@@ -1030,6 +1083,7 @@ async function main() {
1030
1083
  })
1031
1084
  await issueService.createIssueInProject({
1032
1085
  project_id: cicdProject.id,
1086
+ workspace_id: devops.id,
1033
1087
  title: "Rollback automation",
1034
1088
  type: "feature",
1035
1089
  priority: "high",
@@ -1037,6 +1091,7 @@ async function main() {
1037
1091
  })
1038
1092
  await issueService.createIssueInProject({
1039
1093
  project_id: cicdProject.id,
1094
+ workspace_id: devops.id,
1040
1095
  title: "Pipeline documentation",
1041
1096
  type: "task",
1042
1097
  priority: "low",
package/dist/cli.js CHANGED
@@ -14,7 +14,7 @@ import {
14
14
  toKebabCase,
15
15
  toPascalCase,
16
16
  writeFile
17
- } from "./chunk-Y6GFRW6X.js";
17
+ } from "./chunk-EE7FQVVB.js";
18
18
 
19
19
  // src/cli.ts
20
20
  import { Command } from "commander";
@@ -106,8 +106,9 @@ async function buildAdminExtensions(rootDir) {
106
106
  throw err;
107
107
  }
108
108
  }
109
- function startDashboardServer(distDir, port, apiPort, apiHost = "localhost", adminExtensionsBuf = null) {
110
- const configScript = `<script>window.__MERIDIAN_CONFIG__ = { apiUrl: "http://${apiHost}:${apiPort}" };</script>`;
109
+ function startDashboardServer(distDir, port, apiPort, apiHost = "localhost", adminExtensionsBuf = null, apiUrlOverride) {
110
+ const resolvedApiUrl = apiUrlOverride ?? `http://${apiHost}:${apiPort}`;
111
+ const configScript = `<script>window.__MERIDIAN_CONFIG__ = { apiUrl: "${resolvedApiUrl}" };</script>`;
111
112
  return new Promise((resolve, reject) => {
112
113
  const server = http.createServer((req, res) => {
113
114
  const urlPath = (req.url ?? "/").split("?")[0];
@@ -185,6 +186,7 @@ async function runServeDashboard(portOverride) {
185
186
  }
186
187
  const { apiPort, dashboardPort } = await readProjectPorts(rootDir);
187
188
  const port = portOverride ?? dashboardPort;
189
+ const apiUrl = process.env.API_URL ?? `http://localhost:${apiPort}`;
188
190
  let adminExtensionsBuf = null;
189
191
  const extensionsEntry = path.join(rootDir, "src", "admin", "widgets", "index.tsx");
190
192
  if (existsSync(extensionsEntry)) {
@@ -199,9 +201,9 @@ async function runServeDashboard(portOverride) {
199
201
  console.warn(chalk.yellow(" \u26A0 Admin extensions failed to compile:"), err);
200
202
  }
201
203
  }
202
- const server = await startDashboardServer(distDir, port, apiPort, "localhost", adminExtensionsBuf);
204
+ const server = await startDashboardServer(distDir, port, apiPort, "localhost", adminExtensionsBuf, apiUrl);
203
205
  console.log(chalk.green(" \u2714 Admin dashboard: ") + chalk.cyan(`http://localhost:${port}`));
204
- console.log(chalk.dim(` \u2192 API: http://localhost:${apiPort}`));
206
+ console.log(chalk.dim(` \u2192 API: ${apiUrl}`));
205
207
  if (adminExtensionsBuf) {
206
208
  console.log(chalk.dim(` \u2192 Extensions: /admin-extensions.js (${adminExtensionsBuf.length} bytes)`));
207
209
  }
package/dist/index.js CHANGED
@@ -1,7 +1,7 @@
1
1
  #!/usr/bin/env node
2
2
  import {
3
3
  runNew
4
- } from "./chunk-Y6GFRW6X.js";
4
+ } from "./chunk-EE7FQVVB.js";
5
5
 
6
6
  // src/index.ts
7
7
  var projectName = process.argv[2];
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "create-meridian-app",
3
- "version": "0.1.21",
3
+ "version": "0.1.23",
4
4
  "description": "Create a new Meridian project or manage an existing one",
5
5
  "main": "./dist/index.js",
6
6
  "type": "module",