You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: website/src/content/docs/decisions/adr/0001-using-adrs.md
+2-6Lines changed: 2 additions & 6 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -3,13 +3,9 @@ title: Using ADRs
3
3
description: ADR to document the use of ADRs to record decisions.
4
4
---
5
5
6
-
## Summary
7
-
8
-
### Problem statement
9
-
10
6
What is the best way to document key architectural decisions made within the project so that future contributors can understand the rationale behind those decisions?
11
7
12
-
###Decision outcome
8
+
## Decision
13
9
14
10
We've decided to use Architecture Decision Records (ADRs) as described in [Recording decisions](/decisions/overview). These records will be published on the website for this project.
15
11
@@ -22,7 +18,7 @@ We've decided to use Architecture Decision Records (ADRs) as described in [Recor
22
18
- It may be harder for folks to create decision records if they are not familiar with markdown or GitHub
23
19
- We'll need to spend time keeping these decision records up-to-date, so they aren't inaccurate
24
20
25
-
### Decision drivers
21
+
### Criteria
26
22
27
23
-**Transparency:** We want our decisions to be transparent to project stakeholders.
28
24
-**Discoverability:** We want our decisions to be easily discoverable by project maintainers and external stakeholders.
Copy file name to clipboardExpand all lines: website/src/content/docs/decisions/adr/0002-website-framework.md
+2-6Lines changed: 2 additions & 6 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -3,13 +3,9 @@ title: Website framework
3
3
description: ADR documenting the decision to use Astro's Starlight template for project documentation.
4
4
---
5
5
6
-
## Summary
7
-
8
-
### Problem statement
9
-
10
6
We need a framework to build and maintain our documentation site for the protocol that balances simplicity, extensibility, and dynamic content generation. The solution should align with existing tooling for the project and be widely supported within the developer community.
11
7
12
-
###Decision outcome
8
+
## Decision
13
9
14
10
We chose [Astro's Starlight template](https://starlight.astro.build/) for our documentation framework.
15
11
@@ -22,7 +18,7 @@ We chose [Astro's Starlight template](https://starlight.astro.build/) for our do
22
18
- Fewer prebuilt themes than MkDocs or Hugo.
23
19
- Less popular than MkDocs or Next.js, resulting in potentially fewer community resources.
24
20
25
-
### Decision drivers
21
+
### Criteria
26
22
27
23
-**Simplicity:** Easy to set up, maintain, and host documentation.
28
24
-**Extensibility:** Allows customization and supports reusable components.
Copy file name to clipboardExpand all lines: website/src/content/docs/decisions/adr/0003-website-hosting.md
+5-7Lines changed: 5 additions & 7 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -3,13 +3,9 @@ title: GitHub website hosting
3
3
description: ADR documenting the decision to use GitHub Pages as the hosting platform for project documentation.
4
4
---
5
5
6
-
## Summary
7
-
8
-
### Problem statement
9
-
10
6
We need a hosting platform for our documentation site that is cost-effective, simple to set up, and integrates seamlessly with our GitHub-based development workflow.
11
7
12
-
###Decision outcome
8
+
## Decision
13
9
14
10
We chose GitHub Pages as the hosting platform for our documentation site.
15
11
@@ -24,7 +20,7 @@ If SSR or server-side functions (e.g. to process form submissions) become a requ
24
20
- Does not support server-side rendering (SSR) or dynamic functions, which may limit future enhancements.
25
21
- PR previews aren't supported by default.
26
22
27
-
### Decision drivers
23
+
### Criteria
28
24
29
25
-**Cost:** Free or very low cost to host.
30
26
-**Simplicity:** Easy setup with built-in SSL and custom domain support.
@@ -86,7 +82,9 @@ Cloudflare Pages is best if:
86
82
- More complex setup for advanced features
87
83
- Costs money if we exceed free plan (though less than Netlify or Vercel)
88
84
89
-
### Option 3: AWS Amplify, S3, and CloudFront
85
+
### Option 3: AWS
86
+
87
+
Publish the site using AWS amplify with S3 static site hosting and CloudFront CDN.
Copy file name to clipboardExpand all lines: website/src/content/docs/decisions/adr/0004-specification-framework.md
+2-6Lines changed: 2 additions & 6 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -3,13 +3,9 @@ title: Specification framework
3
3
description: ADR documenting the decision to use TypeSpec as the framework for defining the grant protocol and data standard.
4
4
---
5
5
6
-
## Summary
7
-
8
-
### Problem statement
9
-
10
6
We need a framework to define the specification for the grant protocol and data standard that prioritizes modularity, extensibility, validation, compatibility with developer tools, and widespread adoption.
11
7
12
-
###Decision outcome
8
+
## Decision
13
9
14
10
We chose TypeSpec as the framework for defining the grant protocol and data standard, mainly for its ability to define types and API services using a modular approach that can transpile to more common formats like JSON schema and OpenAPI.
15
11
@@ -23,7 +19,7 @@ We chose TypeSpec as the framework for defining the grant protocol and data stan
23
19
- Steeper learning curve compared to simpler formats.
24
20
- Requires more upfront setup for developer tooling.
25
21
26
-
### Decision drivers
22
+
### Criteria
27
23
28
24
-**Validation:** Specification format can be used to validate that implementations comply with the standard.
29
25
-**Modularity:** Specification components can be broken into reusable modules.
Copy file name to clipboardExpand all lines: website/src/content/docs/decisions/adr/0005-protocol-scope.md
+4-10Lines changed: 4 additions & 10 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -3,17 +3,11 @@ title: Protocol design and scope
3
3
description: ADR documenting the decision to use FHIR as a mental model for the grant protocol.
4
4
---
5
5
6
-
## Summary
6
+
We need to determine the scope of our grant protocol specification. Existing protocols range from simple data standards (like GeoJSON) to comprehensive specifications that include both data models and standardized operations (like FHIR and ActivityPub).
7
7
8
-
### Problem statement
8
+
##Decision
9
9
10
-
The definition of a “protocol” and the scope of its specification depends heavily on sources from which we’re drawing inspiration. Some only focus on data standards (e.g., GeoJSON) without defining the kinds of operations that data supports. Others define both data standards and operations, but scope them in different ways (e.g., FHIR and ActivityPub).
11
-
12
-
_Which existing protocol should we use as a mental model for the grant protocol? How does that impact the scope or design of our specification?_
13
-
14
-
### Decision outcome
15
-
16
-
We decided to adopt a combined approach inspired by **FHIR**, defining both standard models for grant data and a minimum set of client-to-server operations that grant platforms should support on that data (e.g. search for and applying to grant opportunities).
10
+
We chose to adopt an approach inspired by **FHIR**, defining both standard models for grant data and a minimum set of client-to-server operations that grant platforms should support (e.g. searching for and applying to grant opportunities).
17
11
18
12
-**Positive consequences**
19
13
- Enables third-parties to build tools that are interoperable with any platform that adopts the protocol.
@@ -23,7 +17,7 @@ We decided to adopt a combined approach inspired by **FHIR**, defining both stan
23
17
- The protocol's client-to-server operations might be too complex for some grant platforms to adopt and too restrictive for others that want to support additional functionality.
24
18
- Some grant platforms may be hesitant to adopt the protocol if the required operations differ significantly from their existing API.
25
19
26
-
### Decision drivers
20
+
### Criteria
27
21
28
22
-**Interoperability**: Make it easier for third-party developers to build tools that work with multiple grant platforms.
29
23
-**Scalability**: Make it easier to support a large number of grant platforms.
Copy file name to clipboardExpand all lines: website/src/content/docs/decisions/adr/0006-protocol-compliance.md
+8-10Lines changed: 8 additions & 10 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -3,15 +3,9 @@ title: Protocol compliance
3
3
description: ADR documenting the decision to define compliance as implementing all required routes and models.
4
4
---
5
5
6
-
## Summary
7
-
8
-
### Problem statement
9
-
10
6
In addition to defining the protocol, we need to define what it means to “comply” with that protocol. This definition should guarantee some consistency across implementations, while also enabling platforms to extend the spec to meet their unique needs.
11
7
12
-
_What definition of compliance balances consistency with flexibility across implementations?_
13
-
14
-
### Decision outcome
8
+
## Decision
15
9
16
10
We define compliance as implementing all required models and routes from the base spec while allowing implementations to support additional routes and models outside the spec.
17
11
@@ -32,6 +26,10 @@ We define compliance as implementing all required models and routes from the bas
32
26
33
27
### Options considered
34
28
29
+
-**Strict implementation:** APIs must implement the base spec exactly as defined.
30
+
-**Full implementation with extensions:** APIs must implement all required routes from the base spec (with approved extensions), and may also define additional routes.
31
+
-**Partial implementation:** APIs only need to implement a subset of required routes.
32
+
35
33
## Evaluation
36
34
37
35
### Side-by-side
@@ -45,7 +43,7 @@ We define compliance as implementing all required models and routes from the bas
45
43
46
44
### Option 1: Strict implementation
47
45
48
-
Each valid input to the implementation spec is also a valid input to the base spec. The implementation does not define additional routes or types that aren't defined by the base spec.
46
+
The API implementation must match the base spec exactly.
49
47
50
48
:::note[Bottom line]
51
49
Option 1 is best if:
@@ -63,7 +61,7 @@ Option 1 is best if:
63
61
64
62
### Option 2: Full implementation with extensions
65
63
66
-
The implementation spec includes _all_ of the required routes and types from the base spec, these routes and models provide valid inputs to the base spec. But a given implementation may define additional routes and models outside the base spec.
64
+
The API implementation includes all required routes from the base spec (with approved extensions). It may also define additional routes that are not specified in the base spec, as long as they don't conflict with the base spec.
67
65
68
66
:::note[Bottom line]
69
67
Option 2 is best if:
@@ -82,7 +80,7 @@ Option 2 is best if:
82
80
83
81
### Option 3: Partial implementation
84
82
85
-
Implementation doesn't have to implement all required routes and models, but the routes and models it implements do need to provide valid inputs to the base spec.
83
+
The API implementation doesn't have to implement all required routes and models, but the routes and models it implements can't conflict with the base spec.
Copy file name to clipboardExpand all lines: website/src/content/docs/decisions/adr/0007-initial-models-and-routes.md
+4-10Lines changed: 4 additions & 10 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -3,15 +3,9 @@ title: v0.1.0 models and routes
3
3
description: This ADR documents the decision to focus on the models and routes needed for search.
4
4
---
5
5
6
-
## Summary
6
+
We need to determine which models and routes should be included in the v0.1.0 release of the protocol. A good v0.1.0 release should be immediately useful, while also laying the groundwork for future expansion.
7
7
8
-
### Problem statement
9
-
10
-
The v0.1.0 release of the protocol should include enough functionality that we demonstrate immediate value, without prematurely defining requirements that may discourage adoption.
11
-
12
-
_Which models and routes should the v0.1.0 release of the protocol include?_
13
-
14
-
### Decision outcome
8
+
## Decision
15
9
16
10
We'll limit the scope of the v0.1.0 protocol to the models and routes needed to support search, while also defining foundational types that make it easier to extend the base spec in the future.
17
11
@@ -25,7 +19,7 @@ We'll limit the scope of the v0.1.0 protocol to the models and routes needed to
25
19
- Doesn't (yet) support key features like applications and reporting.
26
20
- May be harder to make changes once platforms have started adopting the protocol.
27
21
28
-
### Decision drivers
22
+
### Criteria
29
23
30
24
- Encourage early adoption by multiple platforms and stakeholders.
31
25
- Establish foundational elements without over-committing to complex use cases.
@@ -36,7 +30,7 @@ We'll limit the scope of the v0.1.0 protocol to the models and routes needed to
36
30
37
31
#### Data types
38
32
39
-
1.**Base types:**Includes essential reusable fields such as currency, GeoJSON, and custom fields.
33
+
1.**Base types and fields:**Defines essential types like UUIDs and dates; reusable fields like currencyand custom fields; and other foundational patterns like pagination and filtering.
40
34
2.**Grant opportunity models:** Models describing the metadata for grant opportunities.
41
35
3.**Individuals and organizations:** Basic models for describing grantors and grant seekers.
42
36
4.**Application forms and submissions:** Models describing application forms and submissions.
Copy file name to clipboardExpand all lines: website/src/content/docs/decisions/adr/0008-custom-fields.md
+1-5Lines changed: 1 addition & 5 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -3,15 +3,11 @@ title: Custom fields
3
3
description: ADR documenting the approach to defining custom fields.
4
4
---
5
5
6
-
## Summary
7
-
8
-
### Problem statement
9
-
10
6
While the protocol defines a minimum set of fields that are consistent across all implementations, it should also provide a consistent mechanism for defining custom fields that may be shared by some, but not all, implementations.
11
7
12
8
_How can the specification allow developers to define custom fields for their own implementations, while also enabling other implementations to re-use them?_
13
9
14
-
### Sub-questions
10
+
### Questions
15
11
16
12
- Should custom fields have a single `value` property with an associated `type`, or multiple type-based properties (e.g., `stringValue`, `arrayValue`)?
17
13
- Should the `customFields` property be an array of `CustomField` models? Or an object where each value is a `CustomField` model?
Copy file name to clipboardExpand all lines: website/src/content/docs/decisions/adr/0009-monetary-fields.md
+2-6Lines changed: 2 additions & 6 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -3,13 +3,9 @@ title: Monetary fields
3
3
description: ADR documenting the decision to follow PayPal's format for representing monetary values.
4
4
---
5
5
6
-
## Summary
7
-
8
-
### Problem statement
9
-
10
6
We need to choose a format for representing monetary values that balances precision, readability, and flexibility.
11
7
12
-
###Decision outcome
8
+
## Decision
13
9
14
10
We decided to represent monetary values using decimal string representation for the `amount` and an ISO 4217-compliant `currencyCode` field to indicate the denomination. This format is also used by PayPal, ApplePay, Google Wallet and other well known APIs that support monetary transactions.
15
11
@@ -32,7 +28,7 @@ Here's an example of that format:
32
28
-**Precision issues:** Parsing string representations into numeric types could also introduce precision issues to individual implementations.
33
29
-**Numeric operations:** Numeric operations (i.e. sorting, aggregating, etc.) will be harder to do with the raw JSON output.
34
30
35
-
### Decision drivers
31
+
### Criteria
36
32
37
33
- Avoids common errors with floating point precision.
0 commit comments