This tutorial guides you through creating, loading, and exporting an app blueprint using AI Architect, then using that blueprint to generate and run an atPlatform app in your IDE.
diff --git a/docs/SUMMARY.md b/docs/SUMMARY.md
index ab659fd..c82d014 100644
--- a/docs/SUMMARY.md
+++ b/docs/SUMMARY.md
@@ -1,8 +1,8 @@
# Table of contents
-* [🏠 Atsign Docs](README.md)
+* [Welcome](README.md)
* [atPlatform](learn/core/README.md)
- * [atSign](learn/core/atsign.md)
+ * [Atsign](learn/core/atsign.md)
* [atRecord](learn/core/atrecord.md)
* [atSDK](learn/sdk/README.md)
* [Get Started](sdk/get-started.md)
@@ -15,20 +15,28 @@
* [Connection Hooks](sdk/synchronization/connection-hooks.md)
* [Infrastructure](infrastructure.md)
-## 🗒️ Tutorials
+## Tutorials
* [Dart atSDK Walkthrough](tutorials/atsdk-tutorial/README.md)
* [Using the atSDK with Dart](tutorials/atsdk-tutorial/using-the-atsdk-with-dart.md)
* [Get sample code](tutorials/atsdk-tutorial/get-sample-code.md)
- * [Cutting your atSigns keys](tutorials/atsdk-tutorial/cutting-your-atsigns-keys.md)
+ * [Cutting your Atsign keys](tutorials/atsdk-tutorial/cutting-your-atsigns-keys.md)
* [Put and Get data asynchronously](tutorials/atsdk-tutorial/put-and-get-data-asynchronously.md)
- * [Send and Receive data synchronously.](tutorials/atsdk-tutorial/send-and-receive-data-synchronously.md)
+ * [Send and Receive data synchronously](tutorials/atsdk-tutorial/send-and-receive-data-synchronously.md)
* [Remote Procedure Calls (RPC)](tutorials/atsdk-tutorial/rpc.md)
* [atTalk - Encrypted chat client](tutorials/atsdk-tutorial/attalk.md)
+* [AI Architect Walkthrough](tutorials/ai-architect-walkthrough/README.md)
+ * [Nodes and Connections](tutorials/ai-architect-walkthrough/nodes-and-connections.md)
-## Related pages
+## Important links
-* [Main site](https://atsign.com/)
-* [atProtocol specification](https://github.com/atsign-foundation/at\_protocol/blob/trunk/specification/at\_protocol\_specification.md)
-* [atSign Registrar](https://my.atsign.com/)
+* [atsign.com ](https://atsign.com/)
+* [Atsign Registrar](https://my.atsign.com/)
* [NoPorts](https://noports.com)
+* [atPlatform Protocol Specs](https://github.com/atsign-foundation/at_protocol/blob/trunk/specification/at_protocol_specification.md)
+
+## SOCIALS
+
+* [GitHub](https://github.com/atsign-foundation)
+* [Discord](https://discord.atsign.com/)
+* [YouTube](https://www.youtube.com/c/AtsignCo?themeRefresh=1)
diff --git a/docs/infrastructure.md b/docs/infrastructure.md
index 84c4506..596bbd9 100644
--- a/docs/infrastructure.md
+++ b/docs/infrastructure.md
@@ -1,5 +1,6 @@
---
description: How we scale and provide resilience.
+icon: gear-complex-code
---
# Infrastructure
@@ -20,7 +21,7 @@ Atsign runs the Internet atDirectory, which has to be resilient and dependable.
The atDirectory runs in a GCP Virtual Private Cloud. This VPC also houses an auto-scaling Kubernetes cluster which is spread across multiple datacenters and availability zones.
-The atDirectory service is found on the well-known DNS address `root.atsign.org` on port `64.` This is load balanced across the atDirectory containers. These containers, through an internal load balancer, to read-only in-memory databases containing the atSign to Fully Qualified Domain Name (FQDN) and port number mappings for all atSigns.
+The atDirectory service is found on the well-known DNS address `root.atsign.org` on port `64.` This is load balanced across the atDirectory containers. These containers, through an internal load balancer, to read-only in-memory databases containing the Atsign to Fully Qualified Domain Name (FQDN) and port number mappings for all Atsigns.
The read-only databases are kept up to date with a single read-write database. This database is updated by the registrar [website](https://my.atsign.com/), which is run in another Kubernetes cluster.
@@ -28,13 +29,13 @@ This design has proved to be reliable and allows upgrades in place without downt
## atServers
-Each atSign has its own dedicated personal data store, called an "atServer," running as a Docker container within a Docker Swarm. Atsign runs a number of Docker Swarms and can move atServers from one swarm to another. However, for high availability, Atsign relies on the Docker Swarm's manager nodes to orchestrate and ensure each atServer is up and running even if hardware fails within a swarm.
+Each Atsign has its own dedicated personal data store, called an "atServer," running as a Docker container within a Docker Swarm. We run a number of Docker Swarms and can move atServers from one swarm to another. However, for high availability, we rely on the Docker Swarm's manager nodes to orchestrate and ensure each atServer is up and running even if hardware fails within a swarm.
Why Docker Swarm and not Kubernetes? Kubernetes is an excellent choice for groups of containers that provide a service like the atDirectory or websites. But, Kubernetes does not scale down well for thousands or millions of tiny independent containers like atServers. Docker Swarm also provides highly resilient networking and is very lightweight.
resilient atServer Cluster
-The FQDN and port number for a given atSign from the atDirectory is connected to the Docker Swarm. Each Docker Swarm node will route the port number to the right container on the swarm via its internal VXLAN. The Manager Nodes are responsible for ensuring each container is running and available across the whole swarm.
+The FQDN and port number for a given Atsign from the atDirectory is connected to the Docker Swarm. Each Docker Swarm node will route the port number to the right container on the swarm via its internal VXLAN. The Manager Nodes are responsible for ensuring each container is running and available across the whole swarm.
For data requiring persistent storage beyond the Docker Swarm, encrypted atServer data gets transferred to a highly resilient NetApp Cloud Volume managed by GCP. This cloud volume functions as a network file system accessible to the atServers.
diff --git a/docs/learn/core/README.md b/docs/learn/core/README.md
index 5e6034a..f4b7980 100644
--- a/docs/learn/core/README.md
+++ b/docs/learn/core/README.md
@@ -1,16 +1,17 @@
---
description: An overview of Atsign's core pillars of technology
+icon: layer-group
---
# atPlatform
## TL;DR
-The atPlatform allows people, entities and things to communicate privately and securely without having to know about the intricacies of the underlying IP network. The atProtocol is the application protocol used to communicate and atSigns are the addresses on the protocol. All cryptographic keys are cut at the edge by the atSign owner, meaning only the receiving and sending atSigns see data in the clear.
+The atPlatform allows people, entities and things to communicate privately and securely without having to know about the intricacies of the underlying IP network. The atPlatform Protocol is the application protocol used to communicate and Atsign are the addresses on the protocol. All cryptographic keys are cut at the edge by the Atsign owner, meaning only the receiving and sending Atsigns see data in the clear.
-The atPlatform can be used to send data synchronously or asynchronously and can be used as a data plane or a control plane or both simultaneously at Internet scale.
+The atPlatform can be used to send data synchronously or asynchronously, and can be used as a data plane, or a control plane, or both simultaneously at Internet scale.
-
+
@@ -26,7 +27,7 @@ The **atProtocol** is the _application layer protocol_ used to communicate with
## atServer
-An atServer is both a personal data service for storing encrypted data owned by an atSign, and a rendezvous point for information exchange. An atServer is responsible for the delivery of encrypted information to other atServers, from which the owners of those atSigns can then retrieve the data.
+An atServer is both a personal data service for storing encrypted data owned by an Atsign, and a rendezvous point for information exchange. An atServer is responsible for the delivery of encrypted information to other atServers, from which the owners of those Atsigns can then retrieve the data.
{% hint style="info" %}
Unless explicitly made public, atServers only store encrypted data and do not have access to the cryptographic keys, nor the ability to decrypt the stored information.
@@ -49,17 +50,17 @@ Unless explicitly made public, atServers only store encrypted data and do not ha
## atDirectory
-In order for an atSign to communicate with another one on the internet, we need to locate the atServer that can send and receive information securely on its behalf.
+In order for an Atsign to communicate with another one on the internet, we need to locate the atServer that can send and receive information securely on its behalf.
-The location of an atServer is found using the atDirectory service (`root.atsign.org:64`). This directory returns the DNS address and port number of the atServer for any atSign that it has a record for. The atDirectory service contains no information about the owner of the atSign.
+The location of an atServer is found using the atDirectory service (`root.atsign.org:64`). This directory returns the DNS address and port number of the atServer for any Atsign that it has a record for. The atDirectory service contains no information about the owner of the Atsign.
-## atProtocol
+## atPlatform Protocol
{% hint style="info" %}
-The atProtocol communicates via layer 7, the application layer of the OSI model, over TCP/IP.
+The atPlatform Protocol communicates via layer 7, the application layer of the OSI model, over TCP/IP.
{% endhint %}
-The atProtocol is an application protocol that enables data sharing between atSigns. You can learn more about the atProtocol by reading the [specification](https://app.gitbook.com/o/Bf7bj1PZlU306XQWDaeE/s/OKcyQuTtJmcTiYSQrNYQ/). The atProtocol uses TCP/IP and TLS but does not specify how data itself is encrypted, that is the job of the atSDK and atClient libraries.
+The atPlatform Protocol is an application protocol that enables data sharing between Atsigns. You can learn more about the atPlatform Protocol by reading the [specification](https://github.com/atsign-foundation/at_protocol/blob/trunk/specification/at_protocol_specification.md). The atPlatform Protocol uses TCP/IP and TLS but does not specify how data itself is encrypted, that is the job of the atSDK and atClient libraries.
## atSDK
diff --git a/docs/learn/core/atrecord.md b/docs/learn/core/atrecord.md
index d750730..b80018c 100644
--- a/docs/learn/core/atrecord.md
+++ b/docs/learn/core/atrecord.md
@@ -1,15 +1,16 @@
---
description: The format atServers use to store and share data.
+icon: books
---
# atRecord
{% hint style="info" %}
-At Atsign, whenever we mention the word "key" we are normally talking about a cryptographic key.
+Whenever we mention the word "key" we are normally talking about a cryptographic key.
The main exception being the atKey, this is the "key" of a "key value pair" that makes up every atRecord.
-It's unfortunate that the word "key" is polymorphic in computer science, and we have tried in the past to move to other words, but we have decided to stick with keys and the developer will have to understand the context of cryptographic key or key value pair (sorry!)
+It's unfortunate that the word "key" is polymorphic in computer science. We have tried in the past to move to other words, but we have decided to stick with "keys," and the developer will have to understand the context—whether it is a cryptographic key or key value pair (sorry!).
{% endhint %}
atRecords are the data records that are stored by the atServers. We use the common key-value pair format.
@@ -42,7 +43,7 @@ A unique string used to represent the atRecord.
#### Owner's atSign
-The owner (i.e. creator's) atSign for that particular atRecord. The shared by atSign of an atRecord is synonymous to the owner atSign of an atRecord.
+The owner (i.e. creator's) Atsign for that particular atRecord. The shared by Atsign of an atRecord is synonymous to the owner Atsign of an atRecord.
@@ -54,10 +55,10 @@ The owner (i.e. creator's) atSign for that particular atRecord. The shared by at
3. Allowed characters in an entity are: `[\w._,-"']`
4. Namespace is mandatory in the current implementation of the protocol\
i.e entity must follow the notation: `.`
-5. Cached atKeys should have a different owner than the current atSign
+5. Cached atKeys should have a different owner than the current Atsign
6. Visibility scope and owner cannot be the same for a shared atKey
7. Reserved atKeys cannot be [modified](../sdk/crud-operations.md) or [notified](../sdk/events.md)
-8. For newly created atKeys, the owner must match the current atSign
+8. For newly created atKeys, the owner must match the current Atsign
@@ -88,7 +89,7 @@ The following is a list of reserved atIKeys which the atServer requires to funct
**Public atKey**
-1. A `public` atKey with a record id of `location` shared by `@alice`. This atKey typically holds public data that any atSign can access.
+1. A `public` atKey with a record id of `location` shared by `@alice`. This atKey typically holds public data that any Atsign can access.
`public:location@alice`
@@ -130,17 +131,23 @@ The following is a list of reserved atIKeys which the atServer requires to funct
Metadata of the atRecord is also stored and describes the following properties of the atValue.
-
Meta Attribute
Auto create?
Description
availableFrom
Yes
A Date and Time derived from the ttb (now + ttb). A Key should be only available after availableFrom.
ccd
No
Indicates if a cached key needs to be deleted when the atSign user who has originally shared it deletes it.
createdBy
Yes
atSign that has created the key
createdOn
Yes
Date and time when the key has been created.
expiresOn
Yes
A Date and Time derived from the ttl (now + ttl). A Key should be auto deleted once it expires.
isBinary
No
True if the value is a binary value.
isCached
No
True if the key is cached.
isEncrypted
No
True if the value is encrypted.
refreshAt
No
A Date and Time derived from the ttr. The time at which the key gets refreshed.
sharedWith
No
atSign of the user with whom the key has been shared. Can be null if not shared with anyone.
updatedOn
Yes
Date and time when the key has been last updated.
ttb
No
Time to birth in milliseconds.
ttl
No
Time to live in milliseconds.
ttr
No
Time in milliseconds after which the cached key needs to be refreshed. A ttr of -1 indicates that the key can be cached forever. ttr of 0 indicates do not refresh. ttr of > 0 will refresh the key. ttr of null indicates the key is impossible to cache, hence, refreshing does not make sense (which has the same effect as a ttr of 0).
+
Meta Attribute
Auto create?
Description
availableFrom
Yes
A Date and Time derived from the ttb (now + ttb). A Key should be only available after availableFrom.
ccd
No
Indicates if a cached key needs to be deleted when the Atsign owner who has originally shared it deletes it.
createdBy
Yes
Atsign that has created the key
createdOn
Yes
Date and time when the key was created.
expiresOn
Yes
A Date and Time derived from the ttl (now + ttl). A Key should be auto deleted once it expires.
isBinary
No
True if the value is a binary value.
isCached
No
True if the key is cached.
isEncrypted
No
True if the value is encrypted.
refreshAt
No
A Date and Time derived from the ttr. The time at which the key gets refreshed.
sharedWith
No
Atsign of the individual with whom the key has been shared. Can be null if not shared with anyone.
updatedOn
Yes
Date and time when the key was last updated.
ttb
No
Time to birth in milliseconds.
ttl
No
Time to live in milliseconds.
ttr
No
Time in milliseconds after which the cached key needs to be refreshed. A ttr of -1 indicates that the key can be cached forever. ttr of 0 indicates do not refresh. ttr of > 0 will refresh the key. ttr of null indicates the key is impossible to cache, hence, refreshing does not make sense (which has the same effect as a ttr of 0).
## atValue
-Text or binary values can be saved in an atServer.
+You can save text or binary values in an atServer.
-**Small objects are fine to use the atServer but large objects should be used by reference.**
+**While the atServer is suitable for small objects, you should handle large objects by reference.**
-For example, derive a new encryption key, encypt a file, upload that file to location, then notify other atSigns of the location and the encyption key. This is how [atmospherePro ](https://atsign.com/apps/atmospherepro/)works.\
+For example, to share a large file:
+1. Derive a new encryption key.
+2. Encrypt the file.
+3. Upload the file to a storage location.
+4. Notify other Atsigns of the location and the encryption key.
+
+This "by refrence" pattern is used in applications like [NoPorts](https://noports.com) to ensure efficient data transfer.
{% hint style="warning" %}
-The size of the value saved in an atServer is bound by the atProtocol's config parameter "maxBufferSize".
+The size of the value saved in an atServer is bound by the atPlatform Protocol's config parameter "maxBufferSize".
{% endhint %}
diff --git a/docs/learn/core/atsign.md b/docs/learn/core/atsign.md
index 51f4429..3f7f492 100644
--- a/docs/learn/core/atsign.md
+++ b/docs/learn/core/atsign.md
@@ -1,35 +1,30 @@
---
description: A unique identifier which serves as the address of the atServer
+icon: at
---
-# atSign
+# Atsign
-## What is an atSign?
+## What is an Atsign?
-An atSign (e.g. @alice) is simply a resolvable address for an atServer. Anything can have an atSign, a person, entity, or thing (IoT), even individual songs or videos could have atSign addresses.
+An Atsign (e.g. @alice) is simply a resolvable address for an atServer. Anything can have an Atsign, a person, entity, or thing (IoT), even individual songs or videos could have Atsign addresses.
### What's it used for?
-An atSign is used to protect and securely exchange information with other atSigns without any chance of surveillance, impersonation, or theft of the information by anyone.
+An Atsign is used to protect and securely exchange information with other Atsigns without any chance of surveillance, impersonation, or theft of the information by anyone.
-### What characters can be used in an atSign?
+### What characters can be used in an Atsign?
-An atSign supports any combination of Unicode UTF-8 characters that are translated to UTF-7 and must have less than characters 55 characters in length. This provides an enormous name space of 10^224 atSigns.
+An Atsign supports any combination of Unicode UTF-8 characters that are translated to UTF-7 and must have less than characters 55 characters in length. This provides an enormous name space of 10^224 atSigns.
-### How do I get an atSign?
+### How do I get an Atsign?
-Head to [the registrar site](https://my.atsign.com/go). It is recommended that you login with your email. One email can hold up to 10 free atSigns and unlimited paid atSigns.
+Atsigns start at $10 per year. You can purchase and manage your Atsigns at the [Atsign Registrar](https://my.atsign.com/go). While we no longer offer free Atsigns, existing free accounts remain active under our current terms.
### How do I generate my associated cryptographic keys?
-There are multiple ways to generate the associated `.atKeys` file for an atSign. Within applications the .atKeys are stored in encrypted keychains that the OS provides. Using the command line .atKeys files are produced and put in the directory `~/.atsign/keys`.
+There are two ways to generate the `.atKeys` file for an Atsign:
-Most applications have a way to export the .atkeys to a file if you need to keep them safe or use them on another device.
+* When using the command line, .atKeys files are generated and stored in the `~/.atsign/keys` directory. [at\_onboarding\_cli](https://github.com/atsign-foundation/at_client_sdk/blob/trunk/packages/at_onboarding_cli/README.md): Use the `at_activate` command to activate an Atsign you have purchased.
+* If using an atPlatform application, .atKeys are stored in the encrypted keychains provided by the operating system. Most applications allow you to export your .atKeys file for backup or for use on other devices.
-* [Using atmospherePro](https://www.youtube.com/watch?v=8xJnbsuF4C8) (3 minute video)
-* Dart [at\_onboarding\_cli/at\_activate](https://github.com/atsign-foundation/at\_libraries/tree/trunk/packages/at\_onboarding\_cli#activate\_cli) to activate an owned atSign or [at\_onboarding\_cli/at\_register](https://github.com/atsign-foundation/at\_libraries/tree/trunk/packages/at\_onboarding\_cli#register\_cli) to generate a new free atSign.
-* [Java Registration CLI](https://github.com/atsign-foundation/at\_java/blob/trunk/getting\_started\_guide.md)
-
-### Paid atSigns
-
-You can purchase custom atSigns from [the registrar site](https://my.atsign.com/go).
diff --git a/docs/learn/sdk/README.md b/docs/learn/sdk/README.md
index 0544a89..ce4bbb5 100644
--- a/docs/learn/sdk/README.md
+++ b/docs/learn/sdk/README.md
@@ -1,12 +1,13 @@
---
description: Get to know Atsign's SDK, the atSDK
+icon: toolbox
---
# atSDK
## Overview
-The atSDK is the best way to embed the atProtocol into new or existing software. This can be anything from a graphical desktop application to firmware flashed on a microcontroller.
+The atSDK is the best way to embed the atPlatform Protocol into new or existing software. This can be anything from a graphical desktop application to firmware flashed on a microcontroller.
### Sections
diff --git a/docs/learn/sdk/crud-operations.md b/docs/learn/sdk/crud-operations.md
index f15a02b..5954531 100644
--- a/docs/learn/sdk/crud-operations.md
+++ b/docs/learn/sdk/crud-operations.md
@@ -6,20 +6,20 @@ description: How to do basic CRUD operations on an atServer
{% tabs %}
{% tab title="Flutter / Dart" %}
-In Dart, the AtClient is stored within the AtClientManager. Once an atSign has been [onboarded](onboarding.md), you will be able to access the AtClientManager for its associated atSign.
+In Dart, the AtClient is stored within the AtClientManager. Once an Atsign has been [onboarded](onboarding.md), you will be able to access the AtClientManager for its associated atSign.
### AtClientManager
-AtClientManager is a [singleton](https://en.wikipedia.org/wiki/Singleton\_pattern) model. When `AtClientManager.getInstance()` is called, it will get the AtClientManager instance for the last onboarded atSign.
+AtClientManager is a [singleton](https://en.wikipedia.org/wiki/Singleton_pattern) model. When `AtClientManager.getInstance()` is called, it will get the AtClientManager instance for the last onboarded Atsign.
```dart
AtClientManager atClientManager = AtClientManager.getInstance();
```
{% hint style="info" %}
-If you need simultaneous access to multiple atClients, you need to create a new [isolate](https://dart.dev/language/concurrency#how-isolates-work) for each additional atClient, and onboard its atSign within the isolate.
+If you need simultaneous access to multiple atClients, you need to create a new [isolate](https://dart.dev/language/concurrency#how-isolates-work) for each additional atClient, and onboard its Atsign within the isolate.
-An example of this pattern can be found in [at\_daemon\_server](https://github.com/atsign-foundation/at\_services/tree/trunk/packages/at\_daemon\_server/lib/src/server).
+An example of this pattern can be found in [at\_daemon\_server](https://github.com/atsign-foundation/at_services/tree/trunk/packages/at_daemon_server/lib/src/server).
{% endhint %}
### AtClient
@@ -110,11 +110,11 @@ A regular expression used to filter the list of atKeys.
_sharedBy_
-Filter the list of atKeys to only include ones shared by a particular atSign.
+Filter the list of atKeys to only include ones shared by a particular Atsign.
_sharedWith_
-Filter the list of atKeys to only include ones shared with a particular atSign.
+Filter the list of atKeys to only include ones shared with a particular Atsign.
_showHiddenKeys_
@@ -179,49 +179,49 @@ See [#additional-features](crud-operations.md#additional-features "mention") to
### API Docs
-You can find the API reference for the entire package available on [pub](https://pub.dev/documentation/at\_client/latest/).
+You can find the API reference for the entire package available on [pub](https://pub.dev/documentation/at_client/latest/).
-The `AtClient` class API reference is available [here](https://pub.dev/documentation/at\_client/latest/at\_client/AtClient-class.html).
+The `AtClient` class API reference is available [here](https://pub.dev/documentation/at_client/latest/at_client/AtClient-class.html).
{% endtab %}
{% tab title="C" %}
## C
-You can find all of these examples on our [GitHub](https://github.com/atsign-foundation/at\_demos/tree/trunk/demos/get\_started\_c).
+You can find all of these examples on our [GitHub](https://github.com/atsign-foundation/at_demos/tree/trunk/demos/get_started_c).
### Table of Contents
* [#introduction](crud-operations.md#introduction "mention")
* [#put-public-atkey](crud-operations.md#put-public-atkey "mention")
* [#id-1.-create-public-atkey](crud-operations.md#id-1.-create-public-atkey "mention")
- * [#id-2.-call-atclient\_put\_public\_key](crud-operations.md#id-2.-call-atclient\_put\_public\_key "mention")
+ * [#id-2.-call-atclient\_put\_public\_key](crud-operations.md#id-2.-call-atclient_put_public_key "mention")
* [#example-application](crud-operations.md#example-application "mention")
* [#put-self-atkey](crud-operations.md#put-self-atkey "mention")
* [#id-1.-create-a-self-atkey](crud-operations.md#id-1.-create-a-self-atkey "mention")
- * [#id-2.-call-atclient\_put\_self\_key](crud-operations.md#id-2.-call-atclient\_put\_self\_key "mention")
+ * [#id-2.-call-atclient\_put\_self\_key](crud-operations.md#id-2.-call-atclient_put_self_key "mention")
* [#example-application-1](crud-operations.md#example-application-1 "mention")
* [#put-shared-atkey](crud-operations.md#put-shared-atkey "mention")
* [#id-1.-create-a-shared-atkey](crud-operations.md#id-1.-create-a-shared-atkey "mention")
- * [#id-2.-call-atclient\_put\_shared\_key](crud-operations.md#id-2.-call-atclient\_put\_shared\_key "mention")
+ * [#id-2.-call-atclient\_put\_shared\_key](crud-operations.md#id-2.-call-atclient_put_shared_key "mention")
* [#example-application-2](crud-operations.md#example-application-2 "mention")
* [#get-public-atkey](crud-operations.md#get-public-atkey "mention")
* [#id-1.-create-public-atkey-1](crud-operations.md#id-1.-create-public-atkey-1 "mention")
- * [#id-2.-call-atclient\_get\_public\_key](crud-operations.md#id-2.-call-atclient\_get\_public\_key "mention")
+ * [#id-2.-call-atclient\_get\_public\_key](crud-operations.md#id-2.-call-atclient_get_public_key "mention")
* [#id-3.-free-value](crud-operations.md#id-3.-free-value "mention")
* [#example-application-3](crud-operations.md#example-application-3 "mention")
* [#get-self-atkey](crud-operations.md#get-self-atkey "mention")
* [#id-1.-create-a-self-atkey-1](crud-operations.md#id-1.-create-a-self-atkey-1 "mention")
- * [#id-2.-call-atclient\_get\_self\_key](crud-operations.md#id-2.-call-atclient\_get\_self\_key "mention")
+ * [#id-2.-call-atclient\_get\_self\_key](crud-operations.md#id-2.-call-atclient_get_self_key "mention")
* [#id-3.-free-value-1](crud-operations.md#id-3.-free-value-1 "mention")
* [#example-application-4](crud-operations.md#example-application-4 "mention")
* [#get-shared-atkey](crud-operations.md#get-shared-atkey "mention")
* [#id-1.-create-a-shared-atkey-1](crud-operations.md#id-1.-create-a-shared-atkey-1 "mention")
- * [#id-2.-call-atclient\_get\_shared\_key](crud-operations.md#id-2.-call-atclient\_get\_shared\_key "mention")
+ * [#id-2.-call-atclient\_get\_shared\_key](crud-operations.md#id-2.-call-atclient_get_shared_key "mention")
* [#id-3.-free-value-2](crud-operations.md#id-3.-free-value-2 "mention")
* [#example-application-5](crud-operations.md#example-application-5 "mention")
* [#delete-an-atkey](crud-operations.md#delete-an-atkey "mention")
* [#id-1.-create-an-atkey](crud-operations.md#id-1.-create-an-atkey "mention")
- * [#id-2.-call-atclient\_delete](crud-operations.md#id-2.-call-atclient\_delete "mention")
+ * [#id-2.-call-atclient\_delete](crud-operations.md#id-2.-call-atclient_delete "mention")
* [#example-application-6](crud-operations.md#example-application-6 "mention")
* [#request-options](crud-operations.md#request-options "mention")
@@ -235,7 +235,7 @@ If you are unfamiliar with the different atKey types, check out our documentatio
#### 1. Create Public AtKey
-First, create a public atKey. It is important to note that the `shared_by` atSign should be the same as the authenticated atSign in the application.
+First, create a public atKey. It is important to note that the `shared_by` Atsign should be the same as the authenticated Atsign in the application.
```c
atclient_atkey my_public_atkey;
@@ -253,7 +253,7 @@ if (atclient_atkey_create_public_key(&my_public_atkey, atkey_key, atkey_shared_b
#### 2. Call \`atclient\_put\_public\_key\`
-Next, simply \*put\* the value into your atServer. Since we are putting a public value into our atServer, no data will be encrypted and this data will be available for any atSign to get.
+Next, simply \*put\* the value into your atServer. Since we are putting a public value into our atServer, no data will be encrypted and this data will be available for any Atsign to get.
We will pass `NULL` into the request\_options and commit\_id parameters because we want to use the default options for now and we don't particularly care about the commit\_id that it returns, but you could receive it if you would like.
@@ -366,7 +366,7 @@ if (atclient_atkey_create_self_key(&my_self_atkey, atkey_key, atkey_shared_by, a
#### 2. Call \`atclient\_put\_self\_key\`
-This will put a value specially encrypted for your atServer that only the atSign's atKeys can decrypt.
+This will put a value specially encrypted for your atServer that only the Atsign's atKeys can decrypt.
We will pass `NULL` into the request\_options and commit\_id parameters because we want to use the default options for now and we don't particularly care about the commit\_id that it returns, but you could receive it if you would like.
@@ -437,7 +437,7 @@ int main()
const char *atkey_value = "123-456-7890";
/*
- * atclient_put_self_key lets you put a key-value pair in your atSign's atServer.
+ * atclient_put_self_key lets you put a key-value pair in your Atsign's atServer.
* For our purposes, we will pass `NULL` for the request options and the commit id.
* We want to use the default options and we don't want to receive and
* store the commit id.
@@ -480,7 +480,7 @@ if (atclient_atkey_create_shared_key(&my_shared_atkey, atkey_key, atkey_shared_b
#### 2. Call \`atclient\_put\_shared\_key\`
-This function will put our string value into the atServer. Since we are using a Shared atKey, that means only the `shared_by` and `shared_with` atSign will be able to decrypt this value.
+This function will put our string value into the atServer. Since we are using a Shared atKey, that means only the `shared_by` and `shared_with` Atsign will be able to decrypt this value.
We will pass `NULL` into the request\_options and commit\_id parameters because we want to use the default options for now and we don't particularly care about the commit\_id that it returns, but you could receive it if you would like.
@@ -551,7 +551,7 @@ int main()
const char *atkey_value = "123-456-7890";
/*
- * atclient_put_self_key lets you put a key-value pair in your atSign's atServer.
+ * atclient_put_self_key lets you put a key-value pair in your Atsign's atServer.
* For our purposes, we will pass `NULL` for the request options and the commit id.
* We want to use the default options and we don't want to receive and
* store the commit id.
@@ -577,7 +577,7 @@ exit:
#### 1. Create Public AtKey
-First, create a public atKey. It is important to note that the `shared_by` atSign should be the same as the authenticated atSign in the application.
+First, create a public atKey. It is important to note that the `shared_by` Atsign should be the same as the authenticated Atsign in the application.
```c
atclient_atkey my_public_atkey;
@@ -955,7 +955,7 @@ exit:
#### 1. Create an AtKey
-First step is to create the atKey that you wish to delete. This can be of any atKey type (public, self, or shared). What is important to note is that you can only delete an atKey that you own (which means that the authenticated atSign is the same as the shared\_by atSign). This should be obvious because you can only delete atKeys that have once been created by you. Only the rightful owners of the atKey that was created can delete it.
+First step is to create the atKey that you wish to delete. This can be of any atKey type (public, self, or shared). What is important to note is that you can only delete an atKey that you own (which means that the authenticated Atsign is the same as the shared\_by Atsign). This should be obvious because you can only delete atKeys that have once been created by you. Only the rightful owners of the atKey that was created can delete it.
For the sake of this demo, we will create a Shared atKey.
@@ -1044,8 +1044,8 @@ int main()
}
/*
- * `atclient_delete` will delete this shared atkey from our atServer. It is important to note that only the `shared_by` atSign can delete the shared atKey
- * When deleting, the `shared_by` atSign should always be the authenticated atSign in the `atclient` object.
+ * `atclient_delete` will delete this shared atkey from our atServer. It is important to note that only the `shared_by` Atsign can delete the shared atKey
+ * When deleting, the `shared_by` Atsign should always be the authenticated Atsign in the `atclient` object.
* We will pass `NULL` to the request_options and commit_id parameters because we want to use the default request_options and we don't care about the
* commit_id we get back.
*/
diff --git a/docs/learn/sdk/events.md b/docs/learn/sdk/events.md
index 9146581..1168662 100644
--- a/docs/learn/sdk/events.md
+++ b/docs/learn/sdk/events.md
@@ -6,11 +6,11 @@ description: How to send and receive real-time messages
{% tabs %}
{% tab title="Flutter / Dart" %}
-In Dart, the AtClient is stored within the AtClientManager. Once an atSign has been [onboarded](onboarding.md), you will be able to access the AtClientManager for its associated atSign.
+In Dart, the AtClient is stored within the AtClientManager. Once an Atign has been [onboarded](onboarding.md), you will be able to access the AtClientManager for its associated Atsign.
### AtClientManager
-AtClientManager is a [singleton](https://en.wikipedia.org/wiki/Singleton\_pattern) model. When `AtClientManager.getInstance()` is called, it will get the AtClientManager instance for the last onboarded atSign.
+AtClientManager is a [singleton](https://en.wikipedia.org/wiki/Singleton_pattern) model. When `AtClientManager.getInstance()` is called, it will get the AtClientManager instance for the last onboarded atSign.
```dart
AtClientManager atClientManager = AtClientManager.getInstance();
@@ -19,7 +19,7 @@ AtClientManager atClientManager = AtClientManager.getInstance();
{% hint style="info" %}
If you need simultaneous access to multiple atClients, you need to create a new [isolate](https://dart.dev/language/concurrency#how-isolates-work) for each additional atClient, and onboard its atSign within the isolate.
-An example of this pattern can be found in [at\_daemon\_server](https://github.com/atsign-foundation/at\_services/tree/trunk/packages/at\_daemon\_server/lib/src/server).
+An example of this pattern can be found in [at\_daemon\_server](https://github.com/atsign-foundation/at_services/tree/trunk/packages/at_daemon_server/lib/src/server).
{% endhint %}
### AtClient
@@ -60,7 +60,7 @@ await atClient.notificationService.notify(
{% tab title="C" %}
## C
-You can find the full code of this example on our [GitHub](https://github.com/atsign-foundation/at\_demos/tree/trunk/demos/get\_started\_c/4a-monitor#4a---monitor).
+You can find the full code of this example on our [GitHub](https://github.com/atsign-foundation/at_demos/tree/trunk/demos/get_started_c/4a-monitor#4a---monitor).
### Table of Contents
@@ -68,24 +68,24 @@ You can find the full code of this example on our [GitHub](https://github.com/at
* [#monitor](events.md#monitor "mention")
* [#id-1.-include-monitor.h](events.md#id-1.-include-monitor.h "mention")
* [#id-2.-create-a-monitor-context](events.md#id-2.-create-a-monitor-context "mention")
- * [#id-3.-call-atclient\_monitor\_pkam\_authenticate](events.md#id-3.-call-atclient\_monitor\_pkam\_authenticate "mention")
- * [#id-4.-call-atclient\_monitor\_start](events.md#id-4.-call-atclient\_monitor\_start "mention")
- * [#id-5.-call-atclient\_monitor\_read](events.md#id-5.-call-atclient\_monitor\_read "mention")
+ * [#id-3.-call-atclient\_monitor\_pkam\_authenticate](events.md#id-3.-call-atclient_monitor_pkam_authenticate "mention")
+ * [#id-4.-call-atclient\_monitor\_start](events.md#id-4.-call-atclient_monitor_start "mention")
+ * [#id-5.-call-atclient\_monitor\_read](events.md#id-5.-call-atclient_monitor_read "mention")
* [#id-6.-free-everything](events.md#id-6.-free-everything "mention")
* [#example-application](events.md#example-application "mention")
* [#notify](events.md#notify "mention")
* [#id-1.-include-notify.h](events.md#id-1.-include-notify.h "mention")
* [#id-2.-create-a-shared-atkey](events.md#id-2.-create-a-shared-atkey "mention")
* [#id-3.-set-up-notify-params](events.md#id-3.-set-up-notify-params "mention")
- * [#id-4.-call-atclient\_notify](events.md#id-4.-call-atclient\_notify "mention")
+ * [#id-4.-call-atclient\_notify](events.md#id-4.-call-atclient_notify "mention")
* [#id-5.-free-everything](events.md#id-5.-free-everything "mention")
* [#example-application-1](events.md#example-application-1 "mention")
### Introduction
-Events is how we send and receive real-time messages in the atProtocol. The client SDK assists in using the atProtocol simply and handles all the complex encryption stuff for you.
+Events is how we send and receive real-time messages in the atPlatform Protocol. The client SDK assists in using the atPlatform Protocol simply and handles all the complex encryption stuff for you.
-* `notify` is how we send a real-time message to an atSign
+* `notify` is how we send a real-time message to an Atsign
* `monitor` is how we listen for real-time messages
### Monitor
@@ -177,7 +177,7 @@ atclient_monitor_response_free(&response);
#### Example Application
-You can find the full code of this example on our [GitHub](https://github.com/atsign-foundation/at\_demos/tree/trunk/demos/get\_started\_c/4a-monitor#4a---monitor).
+You can find the full code of this example on our [GitHub](https://github.com/atsign-foundation/at_demos/tree/trunk/demos/get_started_c/4a-monitor#4a---monitor).
```c
#include
@@ -316,7 +316,7 @@ exit:
#### 2. Create a Shared atKey
-Since we are notifying another atSign, we have to set up a Shared atKey.
+Since we are notifying another Atsign, we have to set up a Shared atKey.
This process should be familiar to you if you have already gone through [crud-operations.md](crud-operations.md "mention").
@@ -351,7 +351,7 @@ if(atclient_notify_params_set_value(¬ify_params, value) != 0) {
#### 4. Call \`atclient\_notify\`
-Simply call `atclient_notify` .This will send a notification to the `shared_with` atSign that you specified when creating the Shared atKey which was done in this [step](events.md#id-2.-create-a-shared-atkey).
+Simply call `atclient_notify` .This will send a notification to the `shared_with` Atsign that you specified when creating the Shared atKey which was done in this [step](events.md#id-2.-create-a-shared-atkey).
We will pass `NULL` into the `commit_id` parameter because we don't reallty care about the commt id for now. You can receive it by passing a `int *` if you would like.
@@ -372,7 +372,7 @@ atclient_notify_params_free(¬ify_params);
#### Example Application
-You can find the full code of this example on our [GitHub](https://github.com/atsign-foundation/at\_demos/tree/trunk/demos/get\_started\_c/4b-notify#4b---notify).
+You can find the full code of this example on our [GitHub](https://github.com/atsign-foundation/at_demos/tree/trunk/demos/get_started_c/4b-notify#4b---notify).
```c
#include
diff --git a/docs/learn/sdk/onboarding.md b/docs/learn/sdk/onboarding.md
index a4cf7ed..8c6d714 100644
--- a/docs/learn/sdk/onboarding.md
+++ b/docs/learn/sdk/onboarding.md
@@ -10,7 +10,7 @@ description: How to authenticate to an atServer
### **Package Installation**
-In Dart we provide the[ at\_onboarding\_cli](https://pub.dev/packages/at\_onboarding\_cli) package which handles onboarding to the atServer via files stored in the \~/.atsign/keys directory
+In Dart we provide the[ at\_onboarding\_cli](https://pub.dev/packages/at_onboarding_cli) package which handles onboarding to the atServer via files stored in the \~/.atsign/keys directory
Add the package to your project automatically using pub:
@@ -20,7 +20,7 @@ dart pub add at_onboarding_cli
### Usage
-Set up the [preferences](https://pub.dev/documentation/at\_onboarding\_cli/latest/at\_onboarding\_cli/AtOnboardingPreference-class.html) to onboard to the atServer.
+Set up the [preferences](https://pub.dev/documentation/at_onboarding_cli/latest/at_onboarding_cli/AtOnboardingPreference-class.html) to onboard to the atServer.
```dart
AtOnboardingPreference atOnboardingConfig = AtOnboardingPreference()
@@ -35,7 +35,7 @@ Set up the [preferences](https://pub.dev/documentation/at\_onboarding\_cli/lates
..atProtocolEmitted = Version(2, 0, 0);
```
-Next get the onboardingService
+Next, get the onboardingService.
```dart
AtOnboardingService onboardingService = AtOnboardingServiceImpl(
@@ -43,7 +43,7 @@ Next get the onboardingService
atServiceFactory: atServiceFactory);
```
-Finally wait to be onboarded, this returns true once complete.
+Finally, wait to be onboarded. This returns true once complete.
```dart
await onboardingService.authenticate();
@@ -83,7 +83,7 @@ If you followed the [get-started.md](../../sdk/get-started.md "mention") guide f
### Package Installation
-In Flutter, we provide the [at\_onboarding\_flutter](https://pub.dev/packages/at\_onboarding\_flutter) package which handles secure management of these secret keys.
+In Flutter, we provide the [at\_onboarding\_flutter](https://pub.dev/packages/at_onboarding_flutter) package which handles secure management of these secret keys.
Add the package to your project automatically using pub:
@@ -93,7 +93,7 @@ flutter pub add at_onboarding_flutter
### Usage
-Simply call the [`onboard`](https://pub.dev/documentation/at\_onboarding\_flutter/latest/at\_onboarding/AtOnboarding/onboard.html) method whenever you want your app to open the onboarding widget.
+Simply call the [`onboard`](https://pub.dev/documentation/at_onboarding_flutter/latest/at_onboarding/AtOnboarding/onboard.html) method whenever you want your app to open the onboarding widget.
```dart
AtOnboardingResult onboardingResult = await AtOnboarding.onboard(
@@ -121,7 +121,7 @@ Then open the Advanced settings drop down and click `Generate New API Key`:
{% tab title="C" %}
## C
-Find the full example on our [GitHub](https://github.com/atsign-foundation/at\_demos/tree/trunk/demos/get\_started\_c/1-authentication#1---authentication).
+Find the full example on our [GitHub](https://github.com/atsign-foundation/at_demos/tree/trunk/demos/get_started_c/1-authentication#1---authentication).
### 1. Fetch your atServer's address from the production atDirectory
@@ -241,7 +241,7 @@ atclient_free(&atclient);
Here is an example application that authenticates my atSign `@jeremy_0`.
-This code is also available on our [GitHub](https://github.com/atsign-foundation/at\_demos/tree/trunk/demos/get\_started\_c/1-authentication#1---authentication).
+This code is also available on our [GitHub](https://github.com/atsign-foundation/at_demos/tree/trunk/demos/get_started_c/1-authentication#1---authentication).
```c
#include
diff --git a/docs/sdk/get-started.md b/docs/sdk/get-started.md
index 6245de0..24ad2f1 100644
--- a/docs/sdk/get-started.md
+++ b/docs/sdk/get-started.md
@@ -1,5 +1,5 @@
---
-description: Setup the atSDK for your preferred language
+description: Set up the atSDK for your preferred language
---
# Get Started
@@ -10,7 +10,7 @@ description: Setup the atSDK for your preferred language
Guide coming soon!
-For now, please checkout our [atsdk-tutorial](../tutorials/atsdk-tutorial/ "mention")
+For now, please check out our [atsdk-tutorial](../tutorials/atsdk-tutorial/ "mention")
{% endtab %}
{% tab title="Flutter" %}
@@ -238,7 +238,7 @@ Now you are ready to begin developing!
Setup a CMake project which includes the atSDK package suite.
-The full example can be found [here](https://github.com/atsign-foundation/at\_demos/tree/trunk/demos/get\_started\_c/0-my-first-c-app).
+The full example can be found [here](https://github.com/atsign-foundation/at_demos/tree/trunk/demos/get_started_c/0-my-first-c-app).
#### 1. Ensure you have a C Compiler, CMake, and a build automation tool
@@ -303,7 +303,7 @@ The above `CMakeLists.txt` will use FetchContent to download the C atSDK for you
Inside your project folder, create a new file called `main.c`
-Change the line `#define ATSIGN "@jeremy_0"` to the atSign that you have keys to. For example, if you own an atSign `@alice` and have its keys in the correct directory `~/.atsign/keys/@alice_key.atKeys`, then I would change this line in my code to `#define ATSIGN "@alice"`
+Change the line `#define ATSIGN "@jeremy_0"` to the atSign that you have keys to. For example, if you own an Atsign `@alice` and have its keys in the correct directory `~/.atsign/keys/@alice_key.atKeys`, then I would change this line in my code to `#define ATSIGN "@alice"`
```c
#include
@@ -427,7 +427,7 @@ Your output will look similar to:
[INFO] 2024-08-15 00:37:17.019891 | my_first_c_app | Authenticated to atServer successfully!
```
-Congratulations! You have successfully ran a barebones Atsign C application.
+Congratulations! You have successfully run a barebones Atsign C application.
{% endtab %}
{% endtabs %}
diff --git a/docs/tutorials/ai-architect-walkthrough/README.md b/docs/tutorials/ai-architect-walkthrough/README.md
new file mode 100644
index 0000000..2468ba4
--- /dev/null
+++ b/docs/tutorials/ai-architect-walkthrough/README.md
@@ -0,0 +1,164 @@
+---
+description: >-
+ This walkthrough guides you through loading a Blueprint and exporting a prompt
+ using AI Architect, then using that blueprint to generate and run an
+ atPlatform app in your IDE.
+icon: arrow-progress
+---
+
+# AI Architect Walkthrough
+
+{% embed url="https://vimeo.com/1167932458" %}
+
+### Pre-requisite - Get Your Starter Pack Atsigns
+
+Before building or testing any atPlatform app, you need two Atsigns. These act as the identities your app will use during testing and development.
+
+1. Visit [**my.atsign.com/starterpack**](https://my.atsign.com/starterpack)**.**
+2. Verify your email and claim your two free starter-pack Atsigns.
+
+If you already have Atsigns, you can log into [**my.atsign.com/login**](https://my.atsign.com/login) to access them.
+
+{% hint style="info" %}
+These Atsigns will be used later when you run your generated app to test authentication and secure communication.
+{% endhint %}
+
+{% stepper %}
+{% step %}
+### [Open AI Architect and Load the Example Blueprint](./#open-ai-architect)
+
+Load the example so you can see how a Blueprint is structured.
+{% endstep %}
+
+{% step %}
+### [Export the Prompt](./#id-2.-export-the-prompt)
+
+Export the prompt that will be used to tell you LLM exactly what to build.
+{% endstep %}
+
+{% step %}
+### [Open Your IDE, Plan and Code your App](./#id-3.-open-your-ide-plan-and-code-your-app)
+
+Open your IDE, set your LLM to plan, and once happy, let it generate the code.
+{% endstep %}
+
+{% step %}
+### [Build and Run the App](./#id-4.-build-and-run-the-app)
+
+Run the app to make sure everything works as expected.
+{% endstep %}
+
+{% step %}
+### [Create your own Blueprint](./#id-5.-create-your-own-blueprint)
+
+Make a Blueprint for your own idea and repeat the process.
+{% endstep %}
+{% endstepper %}
+
+***
+
+### 1. Open AI Architect and Load the Example Blueprint
+
+AI Architect is the visual blueprinting tool used to design your app’s structure before generating the LLM prompt.
+
+1. Go to [**aiarchitect.atsign.com**](https://aiarchitect.atsign.com/). This opens the workspace where you create or load a Blueprint. The Blueprint you create here becomes the input for your LLM-powered code generation.
+2. Click on **Start with Demo Blueprint** to load our prebuilt example Blueprint. AI Architect will populate the canvas.
+
+{% hint style="info" %}
+A Blueprint is a visual map of your application. Each box represents a node. This could be a person, a process, an AI agent, a service, or any other entity involved in your system. The lines between nodes show how information flows from one part of the system to another.
+
+Every node includes a Notes section, which acts as the node’s job description. This is where you define:
+
+* what the node is responsible for
+* what information it needs
+* how it behaves
+
+A clear Blueprint gives the LLM the structure it needs to build your application in stages.
+{% endhint %}
+
+### 2. Export the Prompt
+
+Once the blueprint is loaded:
+
+1. Select **Export Prompt.**
+2. Copy the generated prompt to your clipboard.
+
+Export Guide generates the full LLM prompt based on your blueprint.
+
+{% hint style="info" %}
+The prompt includes:
+
+* A high‑level application description
+* A breakdown of all nodes (people, processes, things)
+* A breakdown of all connections and their types
+* atPlatform roles for each component
+* Implementation notes for each node
+* Stream/notification patterns for each connection
+* Required dependencies and initialization code
+* Authentication setup
+* A step‑by‑step implementation guide
+
+This becomes the instruction set your LLM will follow to generate the full application.
+{% endhint %}
+
+### 3. Open Your IDE, Plan and Code your App
+
+{% hint style="success" %}
+You can use any IDE you like but we recommend [Visual Studio Code](https://code.visualstudio.com/). When selecting LLMs we have had the most success with the following:
+
+* Claude Sonnet 4.5+
+* Claude Opus 4.5+
+* Gemini 3
+{% endhint %}
+
+Visual Studio Code gives you the flexibility to work with a variety of LLMs, not just one. Depending on the extensions you install, you can choose from models like OpenAI, Gemini, Claude and others.
+
+To get started, you’ll need to create a new empty folder and set your LLM to **Plan Mode.** Starting in Plan Mode is important because it helps to ensure the LLM is going to build what you want it to build.
+
+1. Paste the exported prompt directly into the chat window. It will plan the project and present the plan to you. When you are happy, Proceed with implementation and it will create files, and set up the app.
+2. You will be asked to confirm certain actions (file creation, folder setup, dependency installation).
+3. The LLM may build the application in stages, allowing you to test each step and provide additional instructions. It will continue refining and completing the app based on your original prompt as you guide it through each iteration.
+
+{% hint style="info" %}
+The LLM will:
+
+* Parse the entire blueprint
+* Create the full folder structure
+* Generate Dart/Flutter code using at\_client and related packages
+* Implement each node as a module or service
+* Implement each connection using streams or notifications
+* Set up authentication, onboarding, and identity management
+{% endhint %}
+
+### 4. Build and Run the App
+
+Once the code generation is complete:
+
+1. Follow the build instructions created by your LLM.
+2. Run the app on two separate devices/simulators/emulators.
+3. When prompted, activate or sign into the app using your two starter-pack Atsigns, one for each device. If you need to access them, log into your [**Atsign Dashboard**](https://my.atsign.com/login).
+4. Test sending messages between the two Atsigns.
+
+{% hint style="info" %}
+This validates:
+
+* Atsign onboarding
+* Secure key management
+* Encrypted messaging
+{% endhint %}
+
+### 5. Create your own Blueprint
+
+Once you’ve explored the example Blueprint, you’re ready to create your own. Start Simple. A Blueprint doesn’t need to be perfect on the first pass. Its purpose is to help you think clearly about how your application works and to get you to working code quickly and securely.
+
+When designing your Blueprint, focus on three core questions:
+
+1. What are the nodes?
+2. What does each node do?
+3. How does information move between them?
+
+These three decisions form the foundation of your application’s architecture and guide the LLM as it builds and refines your app.
+
+### Support and Further Help
+
+_If you run into issues, have questions about any step, or want to go deeper into building with the atPlatform, the Atsign team can help. Contact support@atsign.com._
diff --git a/docs/tutorials/ai-architect-walkthrough/nodes-and-connections.md b/docs/tutorials/ai-architect-walkthrough/nodes-and-connections.md
new file mode 100644
index 0000000..6f6277b
--- /dev/null
+++ b/docs/tutorials/ai-architect-walkthrough/nodes-and-connections.md
@@ -0,0 +1,18 @@
+---
+description: 'Not sure when to use what? Here are a few quick guidelines to help you choose:'
+icon: ballot-check
+---
+
+# Nodes and Connections
+
+## Node Palette
+
+
Card
Description
When to use
Example
:user:Person Customers or stakeholders
You want to model people's actions, permissions, or decision points.
A person logging into an admin dashboard, approving a workflow, or sending a secure message.
:diamond:Entity
Business entities or AIs
You need access for AI agents, companies, tenants, departments, identity domains.
A healthcare provider, an insurance company, or a tenant account applying its own access rules.
:cube:Thing
Physical or digital objects/devices
You’re modelling hardware, IoT devices, sensors, servers, or edge components.
A smart meter sending readings, a kiosk receiving updates, or a server reporting health status.
:gear:Process Business processes or Agentic workflows
You want to show business logic, transformations, or background tasks.
A data validation step, a policy enforcement engine, or a message-routing workflow.
:rectangle:API External systems or platform integrations
You’re integrating with third-party services or exposing functionality programmatically.
A payment processor API, mapping service, or internal microservice endpoint.
:plus:Other Custom node type for anything else
You need to include concepts like storage, policies, models, or abstract systems.
A policy store, encryption module, AI model, or logging system.
+
+## Connection Types
+
+{% hint style="warning" icon="lightbulb" %}
+If you are unsure, you can use Data Stream.
+{% endhint %}
+
+
Async Comms
Asynchronous, non-blocking communication where the sender does not wait for a response and the receiver does not need to be online.
Push notifications, system alerts, or status updates sent to users or services.
RPC
Structured request/response interactions between systems. Ideal for complex operations where the other party may not be online at the time of execution (especially useful for policy-driven workflows).
You need a fast end-to-end encrypted TCP connection with raw network speed.
A custom protocol, legacy integration, or long-lived secure connection.
diff --git a/docs/tutorials/atsdk-tutorial/README.md b/docs/tutorials/atsdk-tutorial/README.md
index 196a55e..014d755 100644
--- a/docs/tutorials/atsdk-tutorial/README.md
+++ b/docs/tutorials/atsdk-tutorial/README.md
@@ -1,5 +1,6 @@
---
description: Get hands-on with the atSDK. Simple examples to kickstart your development.
+icon: dart-lang
---
# Dart atSDK Walkthrough
diff --git a/docs/tutorials/atsdk-tutorial/attalk.md b/docs/tutorials/atsdk-tutorial/attalk.md
index 21f88c6..1f58196 100644
--- a/docs/tutorials/atsdk-tutorial/attalk.md
+++ b/docs/tutorials/atsdk-tutorial/attalk.md
@@ -4,11 +4,11 @@ description: Let's chat!
# atTalk - Encrypted chat client
-For the final example we have at\_talk, which is a fully end-to-end encrypted chat application in less than 300 lines of code. There is nothing pretty, its just a command line app, that takes the Unix/Linux command `talk` to a global level.
+For the final example we have at\_talk, which is a fully end-to-end encrypted chat application in less than 300 lines of code. There is nothing pretty; it's just a command line app that takes the Unix/Linux command `talk` to a global level.
-The command `talk` allows people on a Unix/Linux machine to IM each other, at\_talk allows anyone with an atSign to talk with each other.
+The command `talk` allows people on a Unix/Linux machine to IM each other, at\_talk allows anyone with an Atsign to talk with each other.
-This code is in a separate repo so once again in VS Code click the "Clone Git Repository" button. The enter:
+This code is in a separate repo, so, once again, in VS Code click the "Clone Git Repository" button. Then enter:
```
https://github.com/atsign-foundation/at_talk.git
@@ -16,15 +16,15 @@ https://github.com/atsign-foundation/at_talk.git
-Like before, you will get asked if you want to run `pub get` and say yes or if you prefer you can open a terminal window and type:
+Like before, you will get asked if you want to run `pub get` and should say yes, or, if you prefer, you can open a terminal window and type:
```
dart pub get
```
-This as we know pulls in the needed libraries and the code will loose all the red underlines as those libraries are loaded.
+This, as we know, pulls in the needed libraries and the code will lose all the red underlines as those libraries are loaded.
-At this point we can open two terminal panels as we have done before and run the at\_talk code. You can run at\_talk without any arguments and it will return some help:
+At this point, we can open two terminal panels, as we have done before, and run the at\_talk code. You can run at\_talk without any arguments and it will return some help:
```
dart run .\bin\at_talk.dart
@@ -38,40 +38,40 @@ dart run .\bin\at_talk.dart
Invalid argument(s): Option atsign is mandatory.
```
- From here you can split windows like before and run two at\_talk applications and send messages to each other.
+From here, you can split windows like before and run two at\_talk applications and send messages to each other.
-In the left window for example (subsitute your own atSigns!
+In the left window, for example (subsitute your own Atsigns!
```
dart run .\bin\at_talk.dart -a "@7capricorn" -t "@energetic22" -n "atsign"
```
-In the right window, the same but in reverse.
+In the right window, the same, but in reverse.
```
dart run .\bin\at_talk.dart -a "@energetic22" -t "@7capricorn" -n "atsign"
```
-In this session you can see the typed messages in white and th received messages in green with the prompts in red.
+In this session, you can see the typed messages in white and the received messages in green with the prompts in red.
talking atSigns
-Unlike Linux talk, however these two atSigns can be anywhere on the Internet and communicating with Privacy, get a friend to run through the demo and use at\_talk !
+Unlike Linux talk, however, these two Atsigns can be anywhere on the Internet and communicating with Privacy. Get a friend to run through the demo and use at\_talk !
-There are a couple of features, that are worth mentioning you can use the `/` and then an atSign to change who you are sending messages to and yes you can message to yourself.
+There are a couple of features that are worth mentioning: You can use the `/` and then an Atsign to change who you are sending messages to, and, yes, you can message to yourself.
-The other feature that has proved very useful is being able to "pipe" commands to at\_talk. To do this you can compile the code to a binary using:
+The other feature that has proved very useful is being able to "pipe" commands to at\_talk. To do this, compile the code to a binary using:
```
dart compile exe -o attalk bin/at_talk.dart
```
-Now you can "pipe" the output of a command into the chat with the other atSign.
+Now you can "pipe" the output of a command into the chat with the other Atsign.
```
cat .\bin\at_talk.dart| attalk -a "@energetic22" -t "@7capricorn" -n "atsign"
```
-This prints the code of at\_talk.dart into the receiving atsigns chat window. To our knowledge the is the only chat application that you can pipe things too!
+This prints the code of at\_talk.dart into the receiving Atsign's chat window. To our knowledge, this is the _only_ chat application that you can pipe things to!
-If you go this far first thank you and second, please enjoy your continuing journey and raise issues and PR's to any of the repos!
+If you go this far, first, thank you, and second, please enjoy your continuing journey and raise issues and PRs to any of the repos!
diff --git a/docs/tutorials/atsdk-tutorial/cutting-your-atsigns-keys.md b/docs/tutorials/atsdk-tutorial/cutting-your-atsigns-keys.md
index 4bfd665..c76296d 100644
--- a/docs/tutorials/atsdk-tutorial/cutting-your-atsigns-keys.md
+++ b/docs/tutorials/atsdk-tutorial/cutting-your-atsigns-keys.md
@@ -2,24 +2,24 @@
description: It takes two to tango!
---
-# Cutting your atSigns keys
+# Cutting your Atsign keys
-To run through the tutorial you will need at least two atSigns, so you can send and receive. You can get your atSigns for free at [atsign.com](https://atsign.com/) or if you like purchase some that are more personal to you.
+To complete this tutorial, you need at least two Atsigns to send and receive data. You can purchase Atsigns at the [Atsign Registrar](http://my.atsign.com/go).
-Once you have you atsigns you are ready to activate them, which means spinning up your atServer per atSign and cutting your cryptographic keys for each atSign. Sounds complicated but it is easy ! In fact just a single command. In the terminal window type:
+Once you have your Atsigns, you are ready to activate them, which means spinning up one atServer per Atsign and cutting your cryptographic keys for each Atsign. Sounds complicated, but it is easy! In fact, just a single command. In the terminal window type:
```
dart run .\bin\at_activate.dart
```
-You will get an error message telling you to add the `-a` flag and your atsign, so if you atSign was @crunchfrog you would type:
+You will get an error message telling you to add the `-a` flag and your atsign, so if your Atsign was @crunchfrog you would type:
```
dart run .\bin\at_activate.dart -a "@crunchyfrog"
```
-\*Note on windows the atSign needs to be in double quotes so the shell does not get confused with the @ symbol. Below you can see the activation process for two atSigns @energetic22 and @7capricon. Once the command is run you will get and email with the one time password, enter that and the program will create an atKeys file for that atSign. Any atKeys files you create will be located in your home directory then .atsign/keys.
+\*Note on windows the Atsign needs to be in double quotes so the shell does not get confused with the @ symbol. Below you can see the activation process for two Atsigns @energetic22 and @7capricon. Once the command is run you will get and email with the one time password, enter that and the program will create an atKeys file for that Atsign. Any atKeys files you create will be located in your home directory then .atsign/keys.
-These keys are important to be kept safe, as they are the only keys to your atSign and your data. Talking of data lets send some between the two atSigns next.
+These keys are important to be kept safe, as they are the only keys to your Atsign and your data. Speaking of data, let's send some between the two Atsigns next.
diff --git a/docs/tutorials/atsdk-tutorial/get-sample-code.md b/docs/tutorials/atsdk-tutorial/get-sample-code.md
index 45bc7fa..5f73940 100644
--- a/docs/tutorials/atsdk-tutorial/get-sample-code.md
+++ b/docs/tutorials/atsdk-tutorial/get-sample-code.md
@@ -2,7 +2,7 @@
## Open Source on GitHub
-The atPlaform and the atSDKs are all open souce and the code can be found on GitHub and downloaded from [Atsign Foundation](https://github.com/atsign-foundation). But we will start with some easy sample code to show how data can be shared and notifications can be sent between atSigns. These are the basic building blocks for powerful applications like [SSH No Ports](https://www.noports.com/) and graphical applications like [atmospherePro](https://atsign.com/apps/atmospherepro/), both of which are also opensource so you can see the code in action.
+The atPlaform and atSDKs are open source. You can find the source code on GitHub and downloaded from [Atsign Foundation](https://github.com/atsign-foundation). This tutorial starts with sample code to demonstrate how to share data and send notifications between Atsigns. These are the basic building blocks for powerful open-source applications like [NoPorts](https://www.noports.com/), which you can use as a reference to see the code in action.
## Clone the demo repo
diff --git a/docs/tutorials/atsdk-tutorial/put-and-get-data-asynchronously.md b/docs/tutorials/atsdk-tutorial/put-and-get-data-asynchronously.md
index 4476317..6e509e3 100644
--- a/docs/tutorials/atsdk-tutorial/put-and-get-data-asynchronously.md
+++ b/docs/tutorials/atsdk-tutorial/put-and-get-data-asynchronously.md
@@ -6,15 +6,15 @@ description: You have mail!
## Sending and receiving data
-The next step is to send and receive for this to work we need to get the atKeys file containing the cryptographic keys and login or onboard to the atServer. From there we can `put` data and `get` data as if a database was local to us but in fact data is remote on the data owners atServer.
+The next step is to send and receive. For this to work, we need to get the atKeys file containing the cryptographic keys and log in or onboard to the atServer. From there we can `put` data and `get` data as if a database was local to us, but, in fact, data is remote on the data owner's atServer.
-This is achieved by every data element having an owner (the sending atSign) and a receiving atSign, behind the scenes the atSDK encrypts the data and sends it on to the atServer for delivery. All we need to do is a simple:
+This is achieved by every data element having an owner (the sending Atsign) and a receiving Atsign, behind the scenes the atSDK encrypts the data and sends it on to the atServer for delivery. All we need to do is a simple:
```dart
await atClient.put(sharedRecordID, message, putRequestOptions: pro);
```
-of course we also have to setup the atClient object and onboard but that is all in the `at_key_put.dart` file for you. so let's send some data.
+Of course, we also have to set up the atClient object and onboard, but that is all in the `at_key_put.dart` file for you. So let's send some data.
Running the program without arguments brings up this help, most is self explanatory.
@@ -36,7 +36,7 @@ dart run .\bin\at_key_put.dart
Invalid argument(s): Option other-atsign is mandatory.
```
-\*Note here we are using the atSigns activated in the previous section just substitute your own atSigns.
+\*Note here we are using the Atsigns activated in the previous section; just substitute your own Atsigns.
```
dart run .\bin\at_key_put.dart -a "@energetic22" -n "atsign" -o "@7capricorn" -m "hello world"
@@ -44,11 +44,11 @@ Invalid argument(s): Option other-atsign is mandatory.
dart run .\bin\at_key_get.dart -a "@7capricorn" -n "atsign" -o "@energetic22"
```
-The `-n`namespace is lefthand side of the atRecord so in this case the full atRecord would be `@7capricorn:message.atsign@energetic22` and you see this in the results too. Experiment yourself!
+The `-n`namespace is lefthand side of the atRecord, so in this case the full atRecord would be `@7capricorn:message.atsign@energetic22` and you see this in the results, too. Experiment for yourself!
-You may also notice yourself that the first time you fail to get the message. This is because we specified in the metadata that the TTL is 60000 millisecond or 1 minute. Try again as you see in the above image and you should get your message too.
+You may also notice that the first time you fail to get the message. This is because we specified in the metadata that the TTL is 60000 millisecond or 1 minute. Try again as you see in the above image and you should get your message too.
```dart
..metadata = (Metadata()
@@ -56,6 +56,6 @@ You may also notice yourself that the first time you fail to get the message. Th
..ttr = -1); // allow recipient to keep a cached copy
```
-The code is worth taking a look at the code as it less than 70 lines but allows data to transferred from a device anywhere to a device anywhere, and the data is fully encrypted.
+The code is worth taking a look at, as it is less than 70 lines but allows data to be transferred from a device anywhere to a device anywhere, and the data is fully encrypted.
-The data in this example is "store and forward", which is ideal for many use cases but sometimes we need near real time data and that's what we cover next.
+The data in this example is "store and forward", which is ideal for many use cases, but sometimes we need near real time data and that's what we cover next.
diff --git a/docs/tutorials/atsdk-tutorial/rpc.md b/docs/tutorials/atsdk-tutorial/rpc.md
index 04c08dd..b4a53c8 100644
--- a/docs/tutorials/atsdk-tutorial/rpc.md
+++ b/docs/tutorials/atsdk-tutorial/rpc.md
@@ -8,9 +8,9 @@ description: spooky actions at a distance
## Do something remotely and send back the answer.
-RPC has been a design pattern for decades and no surprise we have RPC in the atSDK also. This demo code is in another directory named `at_rpc_demo`. You can get to it by using VS Code and open folder and select that folder. Next once again open two windowpanes.
+RPC has been a design pattern for decades, and, no surprise, we have RPC in the atSDK also. This demo code is in another directory named `at_rpc_demo`. You can get to it by using VS Code and open folder and select that folder. Next, once again, open two windowpanes.
-In the right hand pane enter (again using your atSigns!)
+In the right-hand pane enter (again using your Atsigns!)
```
dart pub get
@@ -23,21 +23,21 @@ dart pub get
dart run .\bin\arithmetic_server.dart -a "@energetic22" -n "atsign" --allow-list "@7capricorn"
```
-Then in the left window you can run up the client
+Then in the left window, you can run up the client
```
dart run .\bin\arithmetic_client.dart -a "@7capricorn" -n "atsign" --server-atsign "@energetic22"
```
-You will get a prompt after a second or two and you can put in a math expression and hit enter. The expression will be send to the other atSign the answer calculated and then returned.
+You will get a prompt after a second or two and you can put in a math expression and hit enter. The expression will be sent to the other Atsign, the answer calculated, and then returned.
See our session in action:
RPC
-Couple of things to notice here are that the RPC server will only respond to RPC's from the designated atSign with the `--allow-list` argument.
+Something to notice here is that the RPC server will only respond to RPCs from the designated Atsign with the `--allow-list` argument.
-The RPC can of course do anything you want it to and the atSigns can be running anywhere.
+The RPC can, of course, do anything you want it to, and the Atsigns can be running anywhere.
### The code
diff --git a/docs/tutorials/atsdk-tutorial/send-and-receive-data-synchronously.md b/docs/tutorials/atsdk-tutorial/send-and-receive-data-synchronously.md
index 18060c5..c6a898f 100644
--- a/docs/tutorials/atsdk-tutorial/send-and-receive-data-synchronously.md
+++ b/docs/tutorials/atsdk-tutorial/send-and-receive-data-synchronously.md
@@ -2,13 +2,13 @@
description: Send me a txt!
---
-# Send and Receive data synchronously.
+# Send and Receive data synchronously
## Sending and receiving data in near real-time
-Sending data as we saw is pretty easy but the receiver would have to continually poll unless we had a mechanism to notify the receiving atSign that they had data to deal with. Fortunately we have just that with atNotifications.
+Sending data, as we saw in the previous example, is pretty easy, but the receiver would have to continually poll unless we had a mechanism to notify the receiving Atsign that they had data to deal with. Fortunately, we have just that with atNotifications.
-A notification can be sent to an atSign and if that atSign is listening for it, it will create an event that can be handled as soon as the notification is received.
+A notification can be sent to an Atsign and if that Atsign is listening for it, it will create an event that can be handled as soon as the notification is received.
To receive we can use code like this:
@@ -25,21 +25,21 @@ And to send code like this:
NotificationParams.forUpdate(sharedRecordID, value: message));
```
-There are two examples in the repo `at_notify_receive.dart` and `at_notify_send.dart` both contain the basics to send an receive synchronously.
+There are two examples in the repo `at_notify_receive.dart` and `at_notify_send.dart` both contain the basics to send and receive synchronously.
-To test for yourself you will need two terminal windows to do that you can press the split button on the VS Code IDE.
+To test for yourself, you will need two terminal windows. To do that, you can press the split button on the VS Code IDE.
-You can then run the following commands agian note to replace the atSigns with your own.
+You can then run the following commands again note to replace the Atsigns with your own.
-In the right window run this first to receive:
+In the right window, run this first to receive:
```dart
dart run .\bin\at_notify_receive.dart -a "@energetic22" -n "atsign"
```
-In the left window you can now send a message using:
+In the left window, you can now send a message using:
```dart
dart run .\bin\at_notify_send.dart -a "@7capricorn" -n "atsign" -o "@energetic22" -m "hello world"
@@ -51,7 +51,7 @@ The net result should look like this, and your message should appear in the righ
You can try sending different messages and make sure they arrive, you can also put Dart on another machine and talk from machine to machine without setting up any other infrastructure.
-Neither the sender nor the receiver need any TCP ports open so this can be used to send end to end encrypted messages in near real-time without VPNs/Firewalls being required, just access to the Internet.
+Neither the sender nor the receiver need any TCP ports open, so this can be used to send end-to-end encrypted messages in near real-time without VPNs/Firewalls being required, just access to the Internet.
If you are thinking this is the basis of a simple end-to-end encrypted chat application, that's coming soon with at\_talk.