|
1 | | -# [PROJECT/AREA/SCOPE NAME] Architecture |
| 1 | +# Architecture |
2 | 2 |
|
3 | | -<!-- |
4 | | -Purpose: System design, structure, patterns, and key decisions |
5 | | -Audience: AI agents needing to understand how this is organized/built |
6 | | -Update Frequency: When architectural patterns emerge or change |
7 | | ---> |
8 | | - |
9 | | -## Overview |
10 | | - |
11 | | -<!-- High-level architectural summary in 2-3 paragraphs --> |
12 | | - |
13 | | -[PROJECT/AREA/SCOPE NAME] is architected as... |
14 | | - |
15 | | -<!-- Describe the fundamental structure, organization, or design approach --> |
16 | | - |
17 | | -## Core Components |
18 | | - |
19 | | -<!-- For projects: technical components. For life areas: organizational areas. For repos: code modules --> |
20 | | - |
21 | | -### [Component/Area 1] |
22 | | -**Purpose:** [What this does] |
23 | | -**Location:** [Where this lives - path, directory, section] |
24 | | -**Key Characteristics:** [Important details about this component] |
25 | | - |
26 | | -### [Component/Area 2] |
27 | | -**Purpose:** [What this does] |
28 | | -**Location:** [Where this lives - path, directory, section] |
29 | | -**Key Characteristics:** [Important details about this component] |
30 | | - |
31 | | -### [Component/Area 3] |
32 | | -**Purpose:** [What this does] |
33 | | -**Location:** [Where this lives - path, directory, section] |
34 | | -**Key Characteristics:** [Important details about this component] |
35 | | - |
36 | | -## Structure |
37 | | - |
38 | | -<!-- Directory/file structure, organizational hierarchy, or system layout --> |
| 3 | +## Repository Structure |
39 | 4 |
|
40 | 5 | ``` |
41 | | -[project-root]/ |
42 | | -├── [directory-1]/ # [Purpose] |
43 | | -│ ├── [subdirectory]/ # [Purpose] |
44 | | -│ └── [file-pattern] # [Purpose] |
45 | | -├── [directory-2]/ # [Purpose] |
46 | | -│ └── [subdirectory]/ # [Purpose] |
47 | | -└── [directory-3]/ # [Purpose] |
| 6 | +sharepoint-web-part/ |
| 7 | +├── assets/ # Screenshots, repo banner, documentation images |
| 8 | +├── demo-corp-intranet/ # Main SPFx solution (production demo) |
| 9 | +│ ├── src/ |
| 10 | +│ │ ├── assets/ # Web part graphics (hero, icons, cards) |
| 11 | +│ │ └── webparts/ # Web part implementations |
| 12 | +│ │ ├── heroBanner/ |
| 13 | +│ │ ├── quickLinks/ |
| 14 | +│ │ └── featureCards/ |
| 15 | +│ ├── config/ # Build configuration |
| 16 | +│ └── sharepoint/solution/ # Packaged .sppkg output |
| 17 | +├── docs/ # Documentation and templates |
| 18 | +├── project/ # Initial Hello World test (archived) |
| 19 | +└── work-logs/ # Development milestone history |
| 20 | + └── 01-github-and-project-setup/ |
48 | 21 | ``` |
49 | 22 |
|
50 | | -<!-- |
51 | | -Adapt this to scope: |
52 | | -- Projects: File system structure |
53 | | -- Life areas: Organizational structure (how information/tasks are organized) |
54 | | -- Repos: Code architecture and module layout |
55 | | ---> |
56 | | - |
57 | | -## Design Patterns and Principles |
| 23 | +## Web Part Architecture |
58 | 24 |
|
59 | | -<!-- Architectural decisions, design patterns used, principles followed --> |
| 25 | +### Design Pattern: HTML/CSS/JS (No Framework) |
60 | 26 |
|
61 | | -### Key Patterns |
| 27 | +**Rationale:** |
62 | 28 |
|
63 | | -- **[Pattern 1]:** [Description and rationale] |
64 | | -- **[Pattern 2]:** [Description and rationale] |
65 | | -- **[Pattern 3]:** [Description and rationale] |
| 29 | +- Simple for clients to customize |
| 30 | +- No React learning curve |
| 31 | +- Minimal build complexity |
| 32 | +- Property panes provide no-code configuration |
66 | 33 |
|
67 | | -<!-- Example: "Event-driven architecture for decoupled component communication" --> |
| 34 | +### Component Structure |
68 | 35 |
|
69 | | -### Design Principles |
70 | | - |
71 | | -1. **[Principle 1]:** [What and why] |
72 | | -2. **[Principle 2]:** [What and why] |
73 | | -3. **[Principle 3]:** [What and why] |
74 | | - |
75 | | -<!-- Example: "KISS principle: Prefer simple, terminal-ready solutions over complex frameworks" --> |
76 | | - |
77 | | -## Integration Points |
78 | | - |
79 | | -<!-- How this connects to other systems, projects, areas, or external services --> |
80 | | - |
81 | | -### Internal Integrations |
82 | | -- **[System/Project/Area]:** [How they connect, what's shared] |
83 | | -- **[System/Project/Area]:** [How they connect, what's shared] |
84 | | - |
85 | | -### External Integrations |
86 | | -- **[Service/API/Tool]:** [Purpose, authentication, usage patterns] |
87 | | -- **[Service/API/Tool]:** [Purpose, authentication, usage patterns] |
88 | | - |
89 | | -## Data Flow |
90 | | - |
91 | | -<!-- How information/data moves through the system --> |
| 36 | +Each web part follows the same pattern: |
92 | 37 |
|
93 | 38 | ``` |
94 | | -[Source] → [Processing/Transformation] → [Destination] |
| 39 | +webpart-name/ |
| 40 | +├── WebPartName.ts # TypeScript main file |
| 41 | +├── WebPartName.module.scss # Styles |
| 42 | +├── loc/ # Localization |
| 43 | +│ ├── mystrings.d.ts |
| 44 | +│ └── en-us.js |
| 45 | +└── WebPartName.manifest.json # Metadata |
95 | 46 | ``` |
96 | 47 |
|
97 | | -<!-- Describe the primary data flows, pipelines, or information movement patterns --> |
| 48 | +### Data Flow |
98 | 49 |
|
99 | | -## Architectural Decisions |
| 50 | +1. **Property Pane → Properties Object** - User configures via UI |
| 51 | +2. **Properties → Render Logic** - TypeScript processes configuration |
| 52 | +3. **Render Logic → DOM** - HTML string injection with styles |
| 53 | +4. **Assets → require()** - Images bundled via Webpack |
100 | 54 |
|
101 | | -<!-- Record significant architectural decisions with rationale --> |
| 55 | +## Build System |
102 | 56 |
|
103 | | -### [Decision 1]: [Title] |
104 | | -**Date:** YYYY-MM-DD |
105 | | -**Decision:** [What was decided] |
106 | | -**Rationale:** [Why this decision was made] |
107 | | -**Alternatives Considered:** [What else was considered and why rejected] |
108 | | -**Implications:** [What this means for the system] |
| 57 | +**Heft-based SPFx v1.22+** |
109 | 58 |
|
110 | | -### [Decision 2]: [Title] |
111 | | -**Date:** YYYY-MM-DD |
112 | | -**Decision:** [What was decided] |
113 | | -**Rationale:** [Why this decision was made] |
114 | | -**Alternatives Considered:** [What else was considered and why rejected] |
115 | | -**Implications:** [What this means for the system] |
| 59 | +``` |
| 60 | +Source Code (TypeScript + SCSS) |
| 61 | + ↓ |
| 62 | + Compilation |
| 63 | + ↓ |
| 64 | +JavaScript Bundles + CSS |
| 65 | + ↓ |
| 66 | + Packaging |
| 67 | + ↓ |
| 68 | +.sppkg (SharePoint Package) |
| 69 | + ↓ |
| 70 | + App Catalog Deployment |
| 71 | + ↓ |
| 72 | +Available in Web Part Picker |
| 73 | +``` |
116 | 74 |
|
117 | | -## Constraints and Limitations |
| 75 | +## Deployment Architecture |
118 | 76 |
|
119 | | -<!-- Technical, organizational, or resource constraints affecting architecture --> |
| 77 | +``` |
| 78 | +Local Development |
| 79 | + ↓ (heft start) |
| 80 | +Workbench Testing |
| 81 | + ↓ (heft package-solution --production) |
| 82 | +.sppkg Package |
| 83 | + ↓ (Upload to App Catalog) |
| 84 | +Tenant-wide Deployment |
| 85 | + ↓ (Add to SharePoint Page) |
| 86 | +Published Intranet Page |
| 87 | +``` |
120 | 88 |
|
121 | | -- **[Constraint 1]:** [Description and impact] |
122 | | -- **[Constraint 2]:** [Description and impact] |
123 | | -- **[Constraint 3]:** [Description and impact] |
| 89 | +## Configuration Management |
124 | 90 |
|
125 | | -<!-- Example: "Token budget requires on-demand file access patterns instead of loading entire vault" --> |
| 91 | +- **Development:** `config/serve.json` (tenant domain) |
| 92 | +- **Build:** `config/package-solution.json` (version, ID) |
| 93 | +- **Dependencies:** `package.json` (npm packages) |
| 94 | +- **TypeScript:** `tsconfig.json` (compilation settings) |
126 | 95 |
|
127 | | -## Future Considerations |
| 96 | +## Asset Management |
128 | 97 |
|
129 | | -<!-- Planned evolution, scalability considerations, known technical debt --> |
| 98 | +**Two Asset Locations:** |
130 | 99 |
|
131 | | -### Planned Improvements |
132 | | -- [Architectural improvement or refactoring planned] |
133 | | -- [Architectural improvement or refactoring planned] |
| 100 | +1. **Repository Assets** (`/assets/`) - Documentation images, banner |
| 101 | +2. **Web Part Assets** (`/demo-corp-intranet/src/assets/`) - Graphics used by web parts (bundled in .sppkg) |
134 | 102 |
|
135 | | -### Scalability Considerations |
136 | | -- [How this will scale or evolve] |
137 | | -- [What might need to change as this grows] |
| 103 | +Assets in `src/assets/` are webpack-bundled and content-hashed for CDN caching. |
138 | 104 |
|
139 | | -### Known Technical Debt |
140 | | -- [Shortcuts taken, areas needing refactoring] |
141 | | -- [Shortcuts taken, areas needing refactoring] |
| 105 | +## Documentation Architecture |
142 | 106 |
|
143 | | -<!-- |
144 | | -SCOPE ADAPTATIONS: |
| 107 | +**Three-Tier Documentation:** |
145 | 108 |
|
146 | | -Projects: Technical architecture, system design, code patterns |
147 | | -Life Areas: Organizational architecture, information structure, workflow patterns |
148 | | -Repositories: Code architecture, module design, dependency structure |
| 109 | +1. **Hudu (Published)** - Operational procedures for Dev/Ops teams |
| 110 | +2. **Repository** - Technical reference, architecture decisions |
| 111 | +3. **Code Comments** - Inline implementation notes |
149 | 112 |
|
150 | | -This file should answer "How is this built/organized?" at a level that guides |
151 | | -decision-making without requiring constant reference to implementation details. |
152 | | ---> |
| 113 | +Cross-references link all three tiers for comprehensive coverage. |
0 commit comments