@synap-core/workspace-templates 0.2.2 → 0.4.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.
@@ -643,384 +643,6 @@ displayTemplates:
643
643
  colors:
644
644
  accent: "#D97706"
645
645
 
646
- seedEntities:
647
- - profileSlug: person
648
- title: Antoine
649
- properties:
650
- person-role: Founder
651
- person-email: antoine@synap.io
652
- person-focus: Synap template stack and PM OS launch
653
- person-okr-owner: true
654
- person-availability: 40
655
- person-timezone: Europe/Paris
656
-
657
- - profileSlug: person
658
- title: Léa Moreau
659
- properties:
660
- person-role: Engineer
661
- person-email: lea@synap.io
662
- person-focus: Display template rendering and entity graph view
663
- person-okr-owner: false
664
- person-availability: 35
665
- person-timezone: Europe/Paris
666
-
667
- - profileSlug: okr
668
- title: "Launch Synap PM OS — Q1 2026"
669
- properties:
670
- okr-status: Active
671
- okr-quarter: "Q1 2026"
672
- okr-owner: "ref:person:Antoine"
673
- okr-type: Company
674
- kr1-label: Template validated and live in staging
675
- kr1-target: 1
676
- kr1-current: 0
677
- kr1-unit: milestone
678
- kr2-label: Onboarding guide published (1,000 words min)
679
- kr2-target: 1
680
- kr2-current: 0
681
- kr2-unit: doc
682
- kr3-label: Demo video recorded and embedded on landing page
683
- kr3-target: 1
684
- kr3-current: 0
685
- kr3-unit: video
686
- okr-confidence: High
687
- okr-review-date: "2026-03-28"
688
- content: |
689
- # OKR Brief: Launch Synap PM OS — Q1 2026
690
-
691
- ## Objective
692
- Ship a fully functional, entity-first project management workspace template that demonstrates the core Synap thesis: goals, projects, sprints, and tasks as a connected relationship graph — not siloed tools.
693
-
694
- ## Why This Matters
695
- The PM software market is $9.76B and growing at 15.4% CAGR, but every major tool treats OKRs and task execution as separate concerns. Asana Goals, Monday OKR boards, ClickUp Goals — all bolted on. None architecturally connects an Objective to the tasks that should advance it.
696
-
697
- Synap PM OS is the proof of concept that our entity model solves this. Before we can tell founders and small teams that Synap replaces their PM stack, we need to show them what that looks like at the template layer.
698
-
699
- ## Success Definition
700
- By March 31, 2026:
701
- - Template JSON validated and live in staging with all 5 profiles, 15 views, 4 display templates, and 26 seed entity relations
702
- - Onboarding guide published: covers OKR setup, sprint configuration, and the relationship graph demo in under 15 minutes of reading
703
- - Demo video (3-5 minutes) showing the OKR → Project → Task traversal from the entity card and the relationship graph view
704
-
705
- ## Key Risks
706
- - Graph view rendering performance on entity-dense workspaces needs testing before public launch
707
- - OKR progress bar computation logic (KR current / KR target) must be validated against edge cases (zero targets, >100% completion)
708
-
709
- ## Dependencies
710
- - Display template renderer must support progress-bar for numeric fields before template goes live
711
- - Seed entity relation pipeline must resolve `ref:` values for all 5 profiles
712
-
713
- - profileSlug: okr
714
- title: "Grow Template Activations — Q1 2026"
715
- properties:
716
- okr-status: Active
717
- okr-quarter: "Q1 2026"
718
- okr-owner: "ref:person:Antoine"
719
- okr-type: Company
720
- kr1-label: Template activations (installs)
721
- kr1-target: 500
722
- kr1-current: 0
723
- kr1-unit: activations
724
- kr2-label: Newsletter subscribers from PM OS launch campaign
725
- kr2-target: 300
726
- kr2-current: 0
727
- kr2-unit: subscribers
728
- kr3-label: LinkedIn post impressions on PM OS launch thread
729
- kr3-target: 15000
730
- kr3-current: 0
731
- kr3-unit: impressions
732
- okr-confidence: Medium
733
- okr-review-date: "2026-03-28"
734
-
735
- - profileSlug: project
736
- title: Build PM OS Template
737
- properties:
738
- project-status: In Progress
739
- project-priority: Critical
740
- project-linked-okr: "ref:okr:Launch Synap PM OS — Q1 2026"
741
- project-owner: "ref:person:Antoine"
742
- project-start: "2026-02-17"
743
- project-deadline: "2026-03-07"
744
- project-milestone: Template JSON validated in staging
745
- project-health: Green
746
- project-effort: 12
747
- project-tags: [Product, Engineering]
748
- project-outcome: "A fully functional PM OS workspace template demonstrating the OKR → Project → Task entity graph"
749
- content: |
750
- # Project Brief: Build PM OS Template
751
-
752
- ## Scope
753
- Design, build, and validate the Synap PM OS workspace template JSON. This includes 5 entity profiles (OKR, Project, Task, Sprint, Person), 15 views, a 12-widget dashboard, 4 display templates, 19 seed entities, and 26 suggested relations.
754
-
755
- ## Deliverables
756
- 1. **pm-os-template.json** — Complete workspace template with all profiles, views, dashboard, display templates, seed entities, and suggestedRelations
757
- 2. **Validation report** — Confirms all ref: values resolve correctly, all entity_id properties point to valid targetProfileSlugs, all views reference existing profiles
758
- 3. **Graph demo check** — Confirms the OKR → Project → Task traversal is visible in the relationship graph view from both the OKR entity card and the Task entity card
759
-
760
- ## Architecture Decisions
761
- - **5 profiles, not 6**: Milestone considered as a sixth profile but folded into Project as a property to reduce complexity for first-time users. Can be promoted to a full profile in v2.
762
- - **Sprint as first-class entity**: Unlike Asana/Monday which treat sprints as a view filter or folder, Sprint is a proper entity with velocity tracking and retrospective document content.
763
- - **OKR progress via three KR fields**: Rather than a dynamic KR sub-entity (complex to render), KR1/KR2/KR3 are direct properties with label + target + current + unit. Keeps the OKR card readable without a sub-table.
764
-
765
- ## Timeline
766
- - Week 1 (Feb 17–21): Profile schemas and property definitions
767
- - Week 2 (Feb 24–28): Views, dashboard, display templates
768
- - Week 3 (Mar 2–7): Seed entities, relations, content, validation
769
-
770
- - profileSlug: project
771
- title: Publish PM OS Onboarding Guide
772
- properties:
773
- project-status: Backlog
774
- project-priority: High
775
- project-linked-okr: "ref:okr:Launch Synap PM OS — Q1 2026"
776
- project-owner: "ref:person:Antoine"
777
- project-start: "2026-03-03"
778
- project-deadline: "2026-03-21"
779
- project-milestone: Guide live at synap.io/templates/pm-os
780
- project-health: Green
781
- project-effort: 4
782
- project-tags: [Product, Marketing]
783
- project-outcome: Founders and small teams can install and configure the PM OS in under 15 minutes using the guide
784
-
785
- - profileSlug: project
786
- title: PM OS Distribution Campaign
787
- properties:
788
- project-status: Planning
789
- project-priority: High
790
- project-linked-okr: "ref:okr:Grow Template Activations — Q1 2026"
791
- project-owner: "ref:person:Antoine"
792
- project-start: "2026-03-10"
793
- project-deadline: "2026-03-31"
794
- project-milestone: Launch LinkedIn thread + Newsletter Issue 14
795
- project-health: Green
796
- project-effort: 5
797
- project-tags: [Marketing]
798
- project-outcome: 500 template activations and 300 newsletter subs from PM OS launch
799
-
800
- - profileSlug: project
801
- title: Waitlist Landing Page
802
- properties:
803
- project-status: Planning
804
- project-priority: Medium
805
- project-linked-okr: "ref:okr:Grow Template Activations — Q1 2026"
806
- project-owner: "ref:person:Antoine"
807
- project-start: "2026-03-01"
808
- project-deadline: "2026-03-14"
809
- project-milestone: Landing page live with waitlist form
810
- project-health: Yellow
811
- project-effort: 3
812
- project-tags: [Product, Marketing]
813
- project-outcome: Dedicated landing page for PM OS with activation count display and waitlist CTA
814
-
815
- - profileSlug: sprint
816
- title: "Sprint 3 — Content OS & Second Brain Final"
817
- properties:
818
- sprint-status: Completed
819
- sprint-number: 3
820
- sprint-start: "2026-02-03"
821
- sprint-end: "2026-02-14"
822
- sprint-goal: "Ship Content OS and Second Brain templates with full schema upgrade (entity_id, relations, displayTemplates, content)"
823
- sprint-capacity: 60
824
- sprint-velocity: 58
825
- sprint-task-count: 14
826
- sprint-completed-count: 13
827
- content: |
828
- # Sprint 3 Retrospective
829
-
830
- **Sprint Goal**: Ship Content OS and Second Brain templates with full schema upgrade.
831
-
832
- **Outcome**: 13/14 tasks completed. Velocity 58/60 hours. One carry-forward: CRM display template polish (moved to Sprint 4).
833
-
834
- ## What Went Well
835
- - Schema upgrade process was smooth once ref_map pattern was established for seed entities
836
- - Content entities (deal briefs, activity notes, project briefs) raised the quality bar significantly — writing content as a real user, not a demonstrator, produced noticeably better seed data
837
- - suggestedRelations architecture creates a graph density pattern: CRM (22 relations) > Content OS (20) > Second Brain (15) — each template's relational profile matches its real-world use
838
-
839
- ## What Didn't
840
- - KR tracking fields in the OKR profile need reconsideration — three separate label/target/current property groups is readable but doesn't scale to dynamic KR counts
841
- - Missed one content entity for Second Brain (planned 4, shipped 3)
842
-
843
- ## Actions Next Sprint
844
- 1. Finalize CRM display template polish (carry-forward)
845
- 2. Begin PM OS template architecture with OKR as first-class entity
846
- 3. Validate relationship graph rendering with dense seed entity set (26 relations target)
847
- 4. Decide: static KR properties vs. sub-entity KR model for v2 OKR profile
848
-
849
- - profileSlug: sprint
850
- title: "Sprint 4 — Template Validation"
851
- properties:
852
- sprint-status: Active
853
- sprint-number: 4
854
- sprint-start: "2026-02-17"
855
- sprint-end: "2026-02-28"
856
- sprint-goal: "Complete PM OS template JSON, CRM display template polish, and begin onboarding guide outline"
857
- sprint-capacity: 55
858
- sprint-velocity: 22
859
- sprint-task-count: 10
860
- sprint-completed-count: 4
861
- sprint-linked-okr: "ref:okr:Launch Synap PM OS — Q1 2026"
862
-
863
- - profileSlug: sprint
864
- title: "Sprint 5 — Docs & Distribution"
865
- properties:
866
- sprint-status: Planning
867
- sprint-number: 5
868
- sprint-start: "2026-03-03"
869
- sprint-end: "2026-03-14"
870
- sprint-goal: "Ship onboarding guide, record demo video, build landing page, draft launch content"
871
- sprint-capacity: 55
872
- sprint-velocity: 0
873
- sprint-task-count: 8
874
- sprint-completed-count: 0
875
- sprint-linked-okr: "ref:okr:Grow Template Activations — Q1 2026"
876
-
877
- - profileSlug: task
878
- title: Define 5 profile schemas
879
- properties:
880
- task-status: Done
881
- task-priority: Critical
882
- task-assignee: "ref:person:Antoine"
883
- task-project: "ref:project:Build PM OS Template"
884
- task-sprint: "ref:sprint:Sprint 4 — Template Validation"
885
- task-due-date: "2026-02-21"
886
- task-effort: 4
887
- task-type: Feature
888
- task-tags: [deep-work]
889
-
890
- - profileSlug: task
891
- title: Configure 15 views
892
- properties:
893
- task-status: Done
894
- task-priority: Critical
895
- task-assignee: "ref:person:Antoine"
896
- task-project: "ref:project:Build PM OS Template"
897
- task-sprint: "ref:sprint:Sprint 4 — Template Validation"
898
- task-due-date: "2026-02-24"
899
- task-effort: 3
900
- task-type: Feature
901
- task-tags: [deep-work]
902
-
903
- - profileSlug: task
904
- title: Write seed entity content
905
- properties:
906
- task-status: In Progress
907
- task-priority: High
908
- task-assignee: "ref:person:Antoine"
909
- task-project: "ref:project:Build PM OS Template"
910
- task-sprint: "ref:sprint:Sprint 4 — Template Validation"
911
- task-due-date: "2026-02-27"
912
- task-effort: 5
913
- task-type: Feature
914
- task-tags: [deep-work]
915
-
916
- - profileSlug: task
917
- title: Validate relationship graph
918
- properties:
919
- task-status: Todo
920
- task-priority: High
921
- task-assignee: "ref:person:Léa Moreau"
922
- task-project: "ref:project:Build PM OS Template"
923
- task-sprint: "ref:sprint:Sprint 4 — Template Validation"
924
- task-due-date: "2026-02-28"
925
- task-effort: 3
926
- task-type: Feature
927
- task-blocked-by: Seed entity content must be complete first
928
- task-tags: [deep-work, waiting]
929
-
930
- - profileSlug: task
931
- title: Write OKR setup walkthrough
932
- properties:
933
- task-status: Backlog
934
- task-priority: High
935
- task-assignee: "ref:person:Antoine"
936
- task-project: "ref:project:Publish PM OS Onboarding Guide"
937
- task-sprint: "ref:sprint:Sprint 5 — Docs & Distribution"
938
- task-due-date: "2026-03-10"
939
- task-effort: 3
940
- task-type: Content
941
- task-tags: [deep-work, async]
942
-
943
- - profileSlug: task
944
- title: Record demo video
945
- properties:
946
- task-status: Backlog
947
- task-priority: High
948
- task-assignee: "ref:person:Antoine"
949
- task-project: "ref:project:Publish PM OS Onboarding Guide"
950
- task-sprint: "ref:sprint:Sprint 5 — Docs & Distribution"
951
- task-due-date: "2026-03-14"
952
- task-effort: 4
953
- task-type: Content
954
- task-blocked-by: Template must be live in staging before recording
955
- task-tags: [deep-work]
956
-
957
- - profileSlug: task
958
- title: Draft LinkedIn launch thread
959
- properties:
960
- task-status: Backlog
961
- task-priority: Medium
962
- task-assignee: "ref:person:Antoine"
963
- task-project: "ref:project:PM OS Distribution Campaign"
964
- task-sprint: "ref:sprint:Sprint 5 — Docs & Distribution"
965
- task-due-date: "2026-03-12"
966
- task-effort: 2
967
- task-type: Content
968
- task-tags: [async]
969
-
970
- - profileSlug: task
971
- title: Schedule newsletter Issue 14 teaser
972
- properties:
973
- task-status: Backlog
974
- task-priority: Medium
975
- task-assignee: "ref:person:Antoine"
976
- task-project: "ref:project:PM OS Distribution Campaign"
977
- task-sprint: "ref:sprint:Sprint 5 — Docs & Distribution"
978
- task-due-date: "2026-03-10"
979
- task-effort: 1
980
- task-type: Content
981
- task-tags: [async, quick-win]
982
-
983
- - profileSlug: task
984
- title: Design hero section copy
985
- properties:
986
- task-status: Backlog
987
- task-priority: Medium
988
- task-assignee: "ref:person:Antoine"
989
- task-project: "ref:project:Waitlist Landing Page"
990
- task-due-date: "2026-03-07"
991
- task-effort: 2
992
- task-type: Content
993
- task-tags: [async, quick-win]
994
-
995
- suggestedRelations:
996
- - { sourceRef: "okr:Launch Synap PM OS — Q1 2026", targetRef: "project:Build PM OS Template", type: parent_of }
997
- - { sourceRef: "okr:Launch Synap PM OS — Q1 2026", targetRef: "project:Publish PM OS Onboarding Guide", type: parent_of }
998
- - { sourceRef: "okr:Grow Template Activations — Q1 2026", targetRef: "project:PM OS Distribution Campaign", type: parent_of }
999
- - { sourceRef: "okr:Grow Template Activations — Q1 2026", targetRef: "project:Waitlist Landing Page", type: parent_of }
1000
- - { sourceRef: "project:Build PM OS Template", targetRef: "task:Define 5 profile schemas", type: parent_of }
1001
- - { sourceRef: "project:Build PM OS Template", targetRef: "task:Configure 15 views", type: parent_of }
1002
- - { sourceRef: "project:Build PM OS Template", targetRef: "task:Write seed entity content", type: parent_of }
1003
- - { sourceRef: "project:Build PM OS Template", targetRef: "task:Validate relationship graph", type: parent_of }
1004
- - { sourceRef: "project:Publish PM OS Onboarding Guide", targetRef: "task:Write OKR setup walkthrough", type: parent_of }
1005
- - { sourceRef: "project:Publish PM OS Onboarding Guide", targetRef: "task:Record demo video", type: parent_of }
1006
- - { sourceRef: "project:PM OS Distribution Campaign", targetRef: "task:Draft LinkedIn launch thread", type: parent_of }
1007
- - { sourceRef: "project:PM OS Distribution Campaign", targetRef: "task:Schedule newsletter Issue 14 teaser", type: parent_of }
1008
- - { sourceRef: "project:Waitlist Landing Page", targetRef: "task:Design hero section copy", type: parent_of }
1009
- - { sourceRef: "sprint:Sprint 4 — Template Validation", targetRef: "task:Define 5 profile schemas", type: relates_to }
1010
- - { sourceRef: "sprint:Sprint 4 — Template Validation", targetRef: "task:Configure 15 views", type: relates_to }
1011
- - { sourceRef: "sprint:Sprint 4 — Template Validation", targetRef: "task:Write seed entity content", type: relates_to }
1012
- - { sourceRef: "sprint:Sprint 4 — Template Validation", targetRef: "task:Validate relationship graph", type: relates_to }
1013
- - { sourceRef: "sprint:Sprint 5 — Docs & Distribution", targetRef: "task:Write OKR setup walkthrough", type: relates_to }
1014
- - { sourceRef: "sprint:Sprint 5 — Docs & Distribution", targetRef: "task:Record demo video", type: relates_to }
1015
- - { sourceRef: "sprint:Sprint 5 — Docs & Distribution", targetRef: "task:Draft LinkedIn launch thread", type: relates_to }
1016
- - { sourceRef: "sprint:Sprint 5 — Docs & Distribution", targetRef: "task:Schedule newsletter Issue 14 teaser", type: relates_to }
1017
- - { sourceRef: "task:Define 5 profile schemas", targetRef: "person:Antoine", type: assigned_to }
1018
- - { sourceRef: "task:Configure 15 views", targetRef: "person:Antoine", type: assigned_to }
1019
- - { sourceRef: "task:Write OKR setup walkthrough", targetRef: "person:Antoine", type: assigned_to }
1020
- - { sourceRef: "task:Draft LinkedIn launch thread", targetRef: "person:Antoine", type: assigned_to }
1021
- - { sourceRef: "okr:Launch Synap PM OS — Q1 2026", targetRef: "person:Antoine", type: assigned_to }
1022
- - { sourceRef: "okr:Grow Template Activations — Q1 2026", targetRef: "person:Antoine", type: assigned_to }
1023
-
1024
646
  # App reference — PM OS lands on its views/dashboard.
1025
647
  app:
1026
648
  kind: stored
@@ -1095,6 +717,44 @@ playbooks:
1095
717
  onboarding:
1096
718
  goal: "Capture the user's goals, the projects in flight, the current sprint, and who's involved — so the workspace mirrors how their team actually plans and delivers."
1097
719
  framing: "Act as a sharp delivery lead / chief of staff. Tease out what outcomes matter this quarter, what's actively being worked, what's in the current cycle, and who owns what. Translate that into OKRs, projects, a sprint, and people."
720
+ expertise:
721
+ starters:
722
+ - >
723
+ Don't collect a wishlist of goals — force ONE north-star metric and 2-3 key results that
724
+ move it. Propose "the single number that means this quarter succeeded" first, then the
725
+ handful of measurable KRs under it. Five objectives is zero objectives; a team that's aiming
726
+ at everything is aiming at nothing.
727
+ - >
728
+ Capture what's actually in flight and impose a WIP limit as you go. Ask "what's genuinely
729
+ being worked THIS week" — not the backlog — and if it's more than the team can finish,
730
+ that's the finding. Too many projects in progress means nothing ships; the map should make
731
+ the overload visible.
732
+ - >
733
+ Every project and KR gets a named owner before anything else. Lead with "who owns this?" —
734
+ a goal with no owner is a hope, and it will quietly slip. Capture the person on the project
735
+ the moment you capture the project; ownerless work is the first thing to surface, not the
736
+ last.
737
+ blindSpots:
738
+ - >
739
+ "Everything is P1" is the prioritization failure that guarantees the wrong things ship. When
740
+ every project is Critical, priority carries no information and the team defaults to whatever's
741
+ loudest. Push back on the priority field — force a real ranking, because if you can't say
742
+ what's LESS important, you haven't prioritized at all.
743
+ - >
744
+ A goal with no owner is a hope, and hopes don't ship. Teams write beautiful OKRs with an
745
+ empty owner field, and the KR that belongs to "the team" belongs to no one. Surface every
746
+ ownerless objective, project, and KR — accountability is a name, not a shared intention.
747
+ - >
748
+ Too much work-in-progress is the silent throughput killer. Founders equate "many things
749
+ started" with progress, but a dozen 60%-done projects deliver nothing while three finished
750
+ ones deliver value. Watch the count of In-Progress items and flag when it exceeds what the
751
+ team can actually close in a cycle.
752
+ bar: >
753
+ A great result is a workspace where the line from a single north-star metric down to the task
754
+ in flight this week is unbroken: one clear objective with measurable KRs, every project and
755
+ goal owned by a named person, a real priority ranking (not all-P1), and a WIP that matches
756
+ capacity. You can answer "are we on track, who owns the thing that's slipping, and what should
757
+ we STOP to ship what matters?" in one look.
1098
758
  collect:
1099
759
  - profileSlug: okr
1100
760
  what: The goals / OKRs that define success this quarter
package/src/radar.yaml CHANGED
@@ -189,6 +189,40 @@ onboarding:
189
189
  THE SCOUT: Act as a sharp market scout. Curious, factual, neutral. Surface who
190
190
  else plays here, where the market is moving, and who's worth learning from.
191
191
  Always cite a source when you can.
192
+ expertise:
193
+ starters:
194
+ - >
195
+ Don't just log named rivals — map the CATEGORY. Buyers compare across three
196
+ tiers: direct competitors, adjacent tools that solve the same job
197
+ differently, and the status quo ("a spreadsheet", "do nothing"). Propose
198
+ entries in all three, because the status quo is usually the real competitor.
199
+ - >
200
+ Track positioning by CONTRAST, not features. For each rival, capture the
201
+ one axis where you're deliberately opposite ("they're enterprise-heavy, we're
202
+ self-serve") — that contrast is what a buyer remembers. If they only give you
203
+ a feature list, reflect the underlying axis back and propose that.
204
+ - >
205
+ Separate LEADING from LAGGING signals. Pricing changes, hiring sprees, and
206
+ docs/changelog velocity predict where a competitor is going; press releases
207
+ and funding rounds only confirm where they've been. Prioritize the leading
208
+ indicators when you propose what to watch.
209
+ blindSpots:
210
+ - >
211
+ "We have no competitors" is a red flag, not a moat — it usually means the
212
+ category is undefined or the buyer's alternative (a manual workaround) hasn't
213
+ been named. Push to name what a buyer does TODAY instead of buying anything.
214
+ - >
215
+ Founders over-watch the loud incumbent and miss the fast-moving insurgent
216
+ one tier down. The threat that kills you is rarely the market leader — it's
217
+ the well-funded startup attacking your exact wedge. Surface the insurgents.
218
+ - >
219
+ A trend with no direction or timing is just a headline. Every trend needs a
220
+ stance: is it rising, steady, or fading, and does it help or hurt you? An
221
+ untimed "AI is big" tells strategy nothing — force the "so what for us".
222
+ bar: >
223
+ The landscape reads like a real map: every rival placed on a contrast axis, the
224
+ status-quo alternative named, and each trend carrying a direction and a "so what"
225
+ — so a strategist can see the open lane you should own, not just a list of logos.
192
226
  collect:
193
227
  - profileSlug: competitor
194
228
  what: Rivals and alternatives a buyer would seriously compare you to.
@@ -261,14 +295,3 @@ bento:
261
295
  - kind: view
262
296
  viewName: Inspirations
263
297
  pos: { x: 6, y: 4, w: 6, h: 4 }
264
-
265
- seedEntities:
266
- - profileSlug: competitor
267
- title: "Example Competitor (replace me)"
268
- properties:
269
- positioning: "An example rival — describe how they position themselves to buyers."
270
- strengths: "What they do well (brand, distribution, price, feature depth)."
271
- weaknesses: "Where they fall short — your opening."
272
- pricing: "e.g. $X/mo per seat"
273
- url: "https://example.com"
274
- status: watching