diff --git a/docs/guides/introduction/about.md b/docs/guides/introduction/about.md index fbd131c5a1..4a37e3294b 100644 --- a/docs/guides/introduction/about.md +++ b/docs/guides/introduction/about.md @@ -1 +1,24 @@ # About Daffodil + +Daffodil is a client-side framework for building ecommerce stores. It presents a standard set of interfaces with which the frontend application can interact along with a selection of drivers that communicate with the platform of choice. + +## Objectives +Daffodil aims to: +- Provide a strongly-typed set of libraries and component kit to simplify ecommerce store development +- Ease migration between ecommerce platforms by decoupling frontend code from the current platform's API +- Provide a collection of features a-la carte style such that no unused features are unnecessarily imported +- Allow extension and customization such that business-specific features can be supported in a platform-agnostic way + + + +## Architecture +The most common type of Daffodil package has a number of layers that can be visualized like so: +```mermaid +flowchart TD + A[Routing] --> B[State] + B --> C{Driver Interfaces} + D[Platform Drivers] --> C + C --> E[Models] +``` +Each of these layers exists as a subpackage of the corresponding feature module, e.g. `@daffodil/cart/state`. + diff --git a/docs/guides/introduction/getting-started.md b/docs/guides/introduction/getting-started.md index 31dd91e805..0390b82cb5 100644 --- a/docs/guides/introduction/getting-started.md +++ b/docs/guides/introduction/getting-started.md @@ -1,2 +1,30 @@ # Getting Started +## Installation +Daffodil packages are provided a la carte. Each package provides a particular feature and must be installed separately. The following example demonstrates how to install the product package with `npm`. +```sh +npm install --save @daffodil/product +``` + +## Usage +The first step is to choose a driver that corresponds to the platform of choice. Daffodil provides lightweight in-memory API drivers to mock out a test platform for rapid frontend development. + +Once a platform has been chosen, import the corresponding driver module: + +```ts +import {DaffProductInMemoryDriverModule} from '@daffodil/product/driver/in-memory' + +@NgModule({ + imports: [ + DaffProductInMemoryDriverModule.forRoot() + ] +}) +class AppModule {} +``` + +Interacting with a given platform through Daffodil can be done in a couple of ways. The simplest, and recommended, way is through state. + +### State +Interaction with the platform is done by dispatching actions and reading data from facades. Daffodil state packages track the loading state of each operation and store the results and/or errors in redux state. + +