# Proposed table of contents for Solidus documentation

This document is a high-level working draft. Where and how this documentation
will exist is still up for discussion.

Note that list items that are ~~crossed out~~ mean that essential documentation
for that topic has been merged.

## Admin

TBD. This documentation will likely re-present content from the developer
documentation in a simplified way. This would be specifically concerning the
admin panel UI, ecommerce concepts that are integral to Solidus, and doing
business day-by-day with it. 

## Developers

It goes without saying: this whole guide should be clearly marked as a guide
*for developers*.

### Getting started

Guides appropriate for developers who haven't used Solidus before. This section
acts as an introduction and bridge into the other sections.

- Introduction to Solidus
  - How is Solidus different from Spree?
- ~~First-time installation~~
- ~~Developing Solidus~~
- ~~Installation options~~
- Before you start development
  - Spree and Solidus data models
  - Overview of Solidus gems
  - Common development patterns and best practices
  - Links to other useful Solidus documentation for new Solidus developers
- Contributing to Solidus

### Basic 

Details core Solidus functionality, concepts, and extending their functionality. 
This section would cover the store elements that most developers would need to 
change in some way for a store.

For example, "As a developer, I need to change the customer signup form so that 
it includes custom fields."

- Cart
- Checkout
  - Standard checkout behavior
    - Optional registration step 
	  - Address information
	  - Delivery options
	  - Payment step
	  - Order confirmation
  - Customizing the checkout flow
    - Checkout domain-specific language (DSL)
    - Add or remove steps from the checkout flow
    - Checkout breadcrumbs
  - Payment profiles 
  - Coupon codes
- Users (Accounts)
  - ~~Addresses~~
  - Authentication
    - `solidus_auth_devise`
    - Custom authentication setup
  - The user model
  - Add custom fields for user accounts
  - Logged in customer areas
  - Guest accounts
- Inventory
  - Stock management from the admin panel
    - Return authorizations
  - Inventory tracking  
- Locations
  - ~~Overview~~
  - ~~Countries and states~~
  - ~~Zones~~
- Mail
  - Mailers
- Orders
  - Overview of the order flow
  - The address model
  - The order model
  - Order adjustments
  - Order states
  - Line items
  - Order updates
  - Cancellations
- Payments
	- Payment states
  - Payment methods
    - Bogus payment methods
  - Payment processing
  - Store credit (Wallet)
  - Auto-capturing payments
  - Logs
  - Custom gateways 
- ~~Products and variants~~
  - ~~Overview~~
  - ~~Multi-currency support~~
	- ~~Variants~~
    - ~~Master variants~~
	- ~~Option types and values~~
	- ~~Product properties~~ 
	- ~~Product images~~
    - ~~Paperclip~~
	- ~~Taxonomies and taxons~~
- Promotions
  - Overview
  - Promotion handlers
  - Promotion actions
  - Promotion rules
  - Create custom promotion actions 
  - Create custom promotion rules
- Shipments
	- ~~Overview~~ 
  - ~~Cartons~~ (stub)
	- ~~Custom shipping calculators~~
  - ~~Shipment setup examples~~
    - ~~Simple example~~
    - ~~Complex example~~
	- ~~Shipping method filters~~
	- ~~`solidus_active_shipping` extension~~
  - ~~Split shipments~~
	- ~~Shipments user interface~~
- Taxation
	- ~~Overview~~
  - ~~Custom tax calculators~~
	- ~~Displaying prices~~
	- ~~Default tax calculator~~
	- Dealing with multiple tax jurisdictions
  - Example tax setups
    - ~~Simple sales tax example~~
    - ~~Simple VAT example~~
    - ~~Complex sales tax example~~
    - Complex VAT example
	- ~~Value-added tax (VAT)~~

### Advanced

Details store functionality that would not require changes for typical stores.
This functionality would likely be changed only in the context of larger
projects where Solidus's built-in functionality would need to be extended or
changed more dramatically.

For example, "As a developer, I need to create a custom frontend for Solidus."
Or, "As a developer, I need to create custom calculators for a subscription
product, where shipping charges change overtime as customers remain loyal."

These topics would be inherently more customization-heavy. 

- Assets
	- `solidus_frontend`
  - `solidus_backend`
	- ~~Overriding Solidus assets~~
	- ~~Asset management (Rails assets pipeline)~~ 
- Calculators
  - Overview of typical calculators
  - Create a custom calculator
  - Calculated adjustments
- Configuration and Preferences
	- Main configuration object (Spree initializer)
  - Model preferences
    - Defining preferences
    - Accessing preferences
  - Site-wide preferences
- Databases
- Extensions
	- Installing extensions
	- Extension development
	- Common problems and troubleshooting 
- Internationalization (i18n)
	- Localization
	- Multi-language stores
	- Multi-country stores
- Permissions (Roles, Access Controls)
- Testing
	- Solidus test suite
	- Extension testing
	- Writing Solidus tests
- Views, models, and controllers
	- Class extension points
  - Decorators
  - Override controller action responses

### System administration

This section discusses hygiene and configuration for deploying and administrating a 
server that runs Solidus.

- Deployment
  - Cloud deployments
  	- AWS
  	- Heroku
	- Recommended deployment configurations
	- SSL
- Content delivery networks (CDNs)
- Image storage with Amazon S3
- Migration
- Security
- Upgrades
  - Safe upgrade checklist
  - Common upgrade problems