-
Notifications
You must be signed in to change notification settings - Fork 0
Add Core Concepts and fix Introduction #1
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Open
shehab-as
wants to merge
14
commits into
main
Choose a base branch
from
shehab/add-intro-and-structure
base: main
Could not load branches
Branch not found: {{ refName }}
Loading
Could not load tags
Nothing to show
Loading
Are you sure you want to change the base?
Some commits from the old base branch may be removed from the timeline,
and old review comments may become outdated.
Open
Changes from all commits
Commits
Show all changes
14 commits
Select commit
Hold shift + click to select a range
7260446
Update layout. Add core-concepts and quickstart
shehab-as d54454c
Keep the same layout
shehab-as 4bd3728
First wave of fixes
shehab-as bd328f5
Second wave of fixes
shehab-as 46f8b0e
Third wave of fixes
shehab-as b56aade
Final touches
shehab-as a146f41
Fix quickstart.mdx
shehab-as 54b0fe8
Fix typos *.mdx
shehab-as 503a765
quick fix
shehab-as 94f2ee4
Add back snippets to API reference
shehab-as a39fd06
Fix using SDKs and API calls in quickstart.mdx
shehab-as 4b96602
Update model-objects
shehab-as 544e72b
Use CodeBlocks
shehab-as a290245
cleanup
shehab-as File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,23 @@ | ||
| # Diagrams | ||
|
|
||
| Diagrams are C4 visualisations of your model. They are views onto the underlying model [objects](/core-concepts/model-objects) and [connections](/core-concepts/model-connections). The model data exists independently of any diagram, and the same object can appear in multiple diagrams. | ||
|
|
||
| --- | ||
|
|
||
| ## Diagram types | ||
|
|
||
| Each diagram type maps to a C4 level of abstraction: | ||
|
|
||
| | Type | C4 Level | Description | | ||
| | --- | --- | --- | | ||
| | `context-diagram` | Level 1 | Shows a `system` in the context of its actors and external systems | | ||
| | `app-diagram` | Level 2 | Shows the `app` and `store` containers inside a `system` | | ||
| | `component-diagram` | Level 3 | Shows the `component` objects inside an `app` or `store` | | ||
|
|
||
| --- | ||
|
|
||
| ## Related concepts | ||
|
|
||
| - [Model Objects](/core-concepts/model-objects) | ||
| - [Flows](/core-concepts/flows) | ||
| - [Versions](/core-concepts/versions) |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,34 @@ | ||
| # Domains | ||
|
|
||
| Domains are named groupings that organise [model objects](/core-concepts/model-objects) into bounded contexts. They map closely to the <Tooltip tip="A software design approach that focuses on modeling software to match a domain. It divides a large system into bounded contexts, each of which have their own model.">Domain-Driven Design (DDD)</Tooltip>. | ||
|
|
||
| --- | ||
|
|
||
| ## What a domain is | ||
|
|
||
| Every model object in a version belongs to exactly one domain. Domains provide a way to segment a large architecture either by business unit (e.g., `Payments`) or by team ownership (e.g., `platform`). | ||
|
|
||
| --- | ||
|
|
||
| ## Creating domains | ||
|
|
||
| Create a domain in a version: | ||
|
|
||
| <EndpointRequestSnippet endpoint="POST /landscapes/{landscapeId}/versions/{versionId}/domains" /> | ||
|
|
||
| --- | ||
|
|
||
| ## Filtering model objects by domain | ||
|
|
||
| Use the `GET` endpoint with query parameter `?filter[domainId]={domainId}` to filter objects. | ||
|
|
||
| <EndpointRequestSnippet endpoint="GET /landscapes/{landscapeId}/versions/{versionId}/model/objects" /> | ||
|
|
||
| This is useful for extracting a bounded-context slice of the architecture for reports or external tools. | ||
|
|
||
| --- | ||
|
|
||
| ## Related concepts | ||
|
|
||
| - [Model Objects](/core-concepts/model-objects) | ||
| - [Model Connections](/core-concepts/model-connections) | ||
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,19 @@ | ||
| # Flows | ||
|
|
||
| Flows are step-by-step sequences that trace a path through your architecture model. Useful for documenting user journeys, request paths, data flows, or any scenario where ordering and directionality matter. | ||
|
|
||
| --- | ||
|
|
||
| ## What a flow is | ||
|
|
||
| A flow lives inside a [diagram](/core-concepts/diagrams) and consists of an ordered list of **steps**. Each step identifies a model [object](/core-concepts/model-objects) or [connection](/core-concepts/model-connections) that participates at that point in the sequence. When viewing a flow in the IcePanel UI, the relevant objects and connections are highlighted in order. | ||
|
|
||
| Flows are distinct from model connections: a connection represents a static relationship between two objects, while a flow represents a dynamic sequence that may traverse many objects and connections. | ||
|
|
||
| --- | ||
|
|
||
| ## Related concepts | ||
|
|
||
| - [Model Objects](/core-concepts/model-objects) | ||
| - [Model Connections](/core-concepts/model-connections) | ||
| - [Diagrams](/core-concepts/diagrams) |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,75 @@ | ||
| # Landscapes | ||
|
|
||
| A landscape is the primary workspace in IcePanel. It holds a complete C4 architecture model including all objects, connections, diagrams, flows, and versions. | ||
|
|
||
| --- | ||
|
|
||
| ## What a landscape contains | ||
|
|
||
| Each landscape is versioned. All models like objects, connections, diagrams, flows, and domains live inside a [version](/core-concepts/versions) of a landscape. | ||
|
|
||
| When you create a landscape, IcePanel automatically creates an initial `latest` version that you can modify immediately. | ||
|
|
||
| Create a landscape: | ||
|
|
||
| <EndpointRequestSnippet endpoint="POST /organizations/{organizationId}/landscapes" /> | ||
|
|
||
| The response returns both the `landscape` and the initial `version` objects. | ||
|
|
||
| List all landscapes in your organization: | ||
|
|
||
| <EndpointRequestSnippet endpoint="GET /organizations/{organizationId}/landscapes" /> | ||
|
|
||
| --- | ||
|
|
||
| ## URL patterns | ||
shehab-as marked this conversation as resolved.
Show resolved
Hide resolved
|
||
|
|
||
| Landscape endpoints are available in two forms. | ||
|
|
||
| **Organization-scoped** (includes org context, useful when you have the org ID in scope): | ||
| ``` | ||
| GET /organizations/{organizationId}/landscapes/{landscapeId} | ||
| ``` | ||
|
|
||
| **Landscape-scoped** (shorter, useful when you already know the landscape ID): | ||
| ``` | ||
| GET /landscapes/{landscapeId} | ||
| ``` | ||
|
|
||
| All version-scoped resources (model objects, diagrams, flows, etc.) use only the landscape-scoped pattern: | ||
| ``` | ||
| GET /landscapes/{landscapeId}/versions/{versionId}/model/objects | ||
| ``` | ||
|
|
||
| You can also specify `latest` as a shorthand for getting the latest version: | ||
|
|
||
| ``` | ||
| GET /landscapes/{landscapeId}/versions/latest/model/objects | ||
| ``` | ||
|
|
||
| --- | ||
|
|
||
| ## Duplicate vs copy | ||
|
|
||
| IcePanel provides two operations for replicating a landscape: | ||
|
|
||
| | Operation | Description | | ||
| | --- | --- | | ||
| | **Duplicate** | Creates a full copy of the landscape within the same organization, including all versions and model content | | ||
| | **Copy** | Copies the model content of a specific version into a different target landscape. This is useful for merging two models or seeding a new landscape from an existing one | | ||
|
|
||
| Duplicate a landscape: | ||
|
|
||
| <EndpointRequestSnippet endpoint="POST /landscapes/{landscapeId}/duplicate" /> | ||
|
|
||
| Copy to another landscape: | ||
|
|
||
| <EndpointRequestSnippet endpoint="POST /landscapes/{landscapeId}/copy" /> | ||
|
|
||
| --- | ||
|
|
||
| ## Related concepts | ||
|
|
||
| - [Versions](/core-concepts/versions) | ||
| - [Model Objects](/core-concepts/model-objects) | ||
| - [Diagrams](/core-concepts/diagrams) | ||
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,47 @@ | ||
| # Model Connections | ||
|
|
||
| Model connections are the edges of the <Tooltip tip="Actors, systems, services, and components that make up your software architecture.">model objects</Tooltip> in your architecture. They represent relationships, dependencies, API calls, data flows, or any meaningful interaction between two model objects. | ||
|
|
||
| --- | ||
|
|
||
| ## Creating connections | ||
|
|
||
| <EndpointRequestSnippet endpoint="POST /landscapes/{landscapeId}/versions/{versionId}/model/connections" /> | ||
|
|
||
| --- | ||
|
|
||
| ## Filtering connections | ||
|
|
||
| The `GET /model/connections` endpoint supports filtering: | ||
|
|
||
| | Query parameter | Description | | ||
| | --- | --- | | ||
| | `filter[originId]` | Connections starting from a specific object | | ||
| | `filter[targetId]` | Connections ending at a specific object | | ||
| | `filter[viaId]` | Connections passing through a specific object | | ||
| | `filter[direction]` | `outgoing` or `bidirectional` | | ||
| | `filter[status]` | Status lifecycle value | | ||
| | `filter[tagIds][]` | One or more tag IDs | | ||
| | `filter[technologyIds][]` | One or more technology IDs | | ||
| | `filter[labels][key]` | Label key-value pair | | ||
| | `filter[name]` | Partial name match | | ||
| | `filter[linked]` | `true` to return only connections with at least one link | | ||
|
|
||
| --- | ||
|
|
||
| ## Status lifecycle | ||
|
|
||
| Connections share the same four-state lifecycle as [model objects](/core-concepts/model-objects): | ||
|
|
||
| | Status | Description | | ||
| | --- | --- | | ||
| | `live` | Active dependency or relationship | | ||
| | `future` | Planned but not yet implemented | | ||
| | `deprecated` | In use but being phased out | | ||
| | `removed` | Retired, kept for historical reference | | ||
|
|
||
| --- | ||
|
|
||
| ## Related concepts | ||
|
|
||
| - [Model Objects](/core-concepts/model-objects) |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,93 @@ | ||
| # Model Objects | ||
|
|
||
| Model objects are the nodes in your architecture graph. They represent the actors, systems, services, and components that make up your software architecture. | ||
|
|
||
| --- | ||
|
|
||
| ## Object types | ||
|
|
||
| IcePanel uses the <Tooltip tip="Framework for visualising software architecture through four levels of abstraction: Context, Containers, Components, and Code">C4 model</Tooltip>'s levels of abstraction. Each object type maps to a C4 level: | ||
|
|
||
| | Type | C4 Level | Description | | ||
| | --- | --- | --- | | ||
| | `root` | — | The root node of every [domain](/core-concepts/domains). There is exactly one per domain. All top-level systems and actors are children of the root. | | ||
| | `actor` | Level 1 | A person or external role that interacts with your architecture (e.g. "Customer", "Admin") | | ||
| | `system` | Level 1 | A top-level software system (e.g. "IcePanel") | | ||
| | `group` | Level 1 | A visual grouping (e.g. "Worker Pool", "Subnet") | | ||
| | `app` | Level 2 | A deployable unit (container) inside a system: a service, web app, mobile app, or queue | | ||
| | `store` | Level 2 | A persistent data store inside a system: a database, blob store, or cache | | ||
| | `component` | Level 3 | An internal building block inside an `app` or `store` | | ||
|
|
||
| --- | ||
|
|
||
| ## The parent–child hierarchy | ||
|
|
||
| Model objects form a tree. Every object except `root` has a `parentId` pointing to its parent: | ||
|
|
||
| ``` | ||
| root | ||
| ├── actor: Customer | ||
| ├── system: Payment Service | ||
| │ ├── app: API Gateway | ||
| │ │ ├── component: Auth Middleware | ||
| │ │ └── component: Rate Limiter | ||
| │ ├── app: Payment Processor | ||
| │ └── store: Transactions DB | ||
| └── system: Auth Platform (external) | ||
| ``` | ||
|
|
||
| --- | ||
|
|
||
| ## Creating objects | ||
|
|
||
| To create a new object, specify the `landscapeId` and either the `versionId` or `latest`: | ||
| <EndpointRequestSnippet endpoint="POST /landscapes/{landscapeId}/versions/{versionId}/model/objects" /> | ||
|
|
||
| --- | ||
|
|
||
| ## Filtering objects | ||
|
|
||
| To find the root object (required as `parentId` when creating top-level objects), use the query parameter `?filter[type]=root` | ||
|
|
||
| <EndpointRequestSnippet endpoint="GET /landscapes/{landscapeId}/versions/{versionId}/model/objects" /> | ||
|
|
||
| The `GET /model/objects` endpoint supports the following filters: | ||
|
|
||
| | Query parameter | Description | | ||
| | --- | --- | | ||
| | `filter[type]` | Object type | | ||
| | `filter[status]` | Status lifecycle value | | ||
| | `filter[parentId]` | Direct parent ID | | ||
| | `filter[domainId]` | Domain ID | | ||
| | `filter[external]` | `true` / `false` | | ||
| | `filter[tagIds][]` | One or more tag IDs | | ||
| | `filter[teamIds][]` | One or more team IDs | | ||
| | `filter[technologyIds][]` | One or more technology IDs | | ||
| | `filter[labels][key]` | Label key-value pair | | ||
| | `filter[name]` | Partial name match | | ||
| | `filter[linked]` | `true` to return only objects with at least one link | | ||
|
|
||
| --- | ||
|
|
||
| ## Status lifecycle | ||
|
|
||
| Objects and connections share a four-state lifecycle representing their architectural status: | ||
|
|
||
| ``` | ||
| live → deprecated → removed → future | ||
| ``` | ||
|
|
||
| | Status | Description | | ||
| | --- | --- | | ||
| | `live` | Current, active element | | ||
| | `future` | Planned but not yet built | | ||
| | `deprecated` | Still in use but being phased out | | ||
| | `removed` | Retired, kept for historical reference | | ||
|
|
||
| Use the `filter[status]` query parameter to retrieve only objects with a given status. | ||
|
|
||
| --- | ||
|
|
||
| ## Related concepts | ||
|
|
||
| - [Model Connections](/core-concepts/model-connections) |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,16 @@ | ||
| # Organizations | ||
|
|
||
| An organization is the top-level model in IcePanel. It owns all landscapes, manages billing, and controls who has access. | ||
|
|
||
| --- | ||
|
|
||
| Every API key and every landscape belongs to exactly one organization. The `organizationId` is the first path parameter you'll need for most operations. | ||
|
|
||
| <EndpointRequestSnippet endpoint="GET /organizations/{organizationId}" /> | ||
|
|
||
| --- | ||
|
|
||
| ## Related concepts | ||
|
|
||
| - [Landscapes](/core-concepts/landscapes) | ||
| - [Versions](/core-concepts/versions) |
Oops, something went wrong.
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Awesome!