Differences
This shows you the differences between two versions of the page.
Both sides previous revision Previous revision Next revision | Previous revision | ||
companion_planting:powerplant:software_specification [2017/12/10 20:56] – [Users] aimeejulia | powerplant:software_specification [2019/04/01 21:46] (current) – ecohack | ||
---|---|---|---|
Line 7: | Line 7: | ||
for " | for " | ||
- | Version <0.13> | + | Document |
Line 13: | Line 13: | ||
- | powerplant is a software | + | powerplant is an opensource webapp |
===== Users ===== | ===== Users ===== | ||
Line 37: | Line 37: | ||
=== Software description === | === Software description === | ||
+ | Powerplant ... | ||
+ | * ... offers fast and easy solution for knowing which crops (bene)fit together | ||
+ | * ... provides an easy to follow schedule for planting, transplanting, | ||
+ | * ... provides information about the crops themselves | ||
+ | * ... gives suggestions which plants should be grown in which enviroment - location, climate, ... | ||
+ | * ... pushes and pulls crop information to/from several open data platforms | ||
+ | * ... allows multiple Users to work on the same garden bed/s | ||
+ | * and allows User input to improve data | ||
- | * Offer fast and easy solution for knowing which crops (bene)fit together | + | powerplant is open-source |
- | * Provide an easy to follow schedule for planting, transplanting, | + | |
- | * Provide information about the crops themselves | + | |
- | * Push and pull crop information to/from several open data platforms | + | |
- | * User can submit changes to improve data | + | |
- | * Open-source/ | + | |
- | > TODO: write more and better text | ||
=== Objectives === | === Objectives === | ||
- | * Improve planning process for anyone who wants to use permaculture principles in their gardening. | + | |
- | * Save time during the planning process for anyone who wants to use permaculture principles in their gardening. | + | * Save time during the planning process for anyone who wants to use permaculture principles in their gardening. |
- | * Education of users | + | * Education of users |
- | * Improve and collect data in open databases | + | * Improve and collect data in open databases |
- | * Increase harvest yield | + | * Increase harvest yield |
- | * Connect with other open source projects for mutual benefit | + | * Connect with other open source projects for mutual benefit |
===== Overall Description ===== | ===== Overall Description ===== | ||
+ | |||
+ | < | ||
<pre> | <pre> | ||
Line 81: | Line 85: | ||
+-----------------------+ | +-----------------------+ | ||
</ | </ | ||
+ | |||
+ | </ | ||
Line 97: | Line 103: | ||
The permaculture ideals are: | The permaculture ideals are: | ||
- | * Care for the earth | + | |
- | * Care for the people | + | * Care for the people |
- | * Fair share | + | * Fair share |
Open Source/ Open Data. | Open Source/ Open Data. | ||
Line 107: | Line 113: | ||
A year of use of this software will result in: | A year of use of this software will result in: | ||
- | * Users adding to data from all over the world (different climates, soil types) | + | |
- | * Maybe make some money for affiliate links (seeds, supplies) or donations | + | * Maybe make some money for affiliate links (seeds, supplies) or donations |
- | * Users plan garden and fields with our software | + | * Users plan garden and fields with our software |
- | * Users are better educated about gardening and permaculture | + | * Users are better educated about gardening and permaculture |
- | * Enhance other open source projects with valuable information | + | * Enhance other open source projects with valuable information |
- | * More development on powerplant resulting in better software | + | * More development on powerplant resulting in better software |
- | ** especially including more OS/OD enthusiasts | + | |
- | ** building up networks with different OS/OD projects | + | |
==== Product Functionality ==== | ==== Product Functionality ==== | ||
- | > 1 TODO: Add major functions that the product must perform or must let the user perform. | + | >TODO: Add major functions that the product must perform or must let the user perform. |
=== Must Have === | === Must Have === | ||
- | * Select different guides | + | |
- | * Offline and online user experience | + | * Offline and online user experience |
- | * Suggestions for existing beds | + | * Suggestions for existing beds |
- | * Mark a bed as full or not | + | * Mark a bed as full or not |
- | * Notifications from schedule | + | * Notifications from schedule |
- | * Tasks and actions | + | * Tasks and actions |
- | * Schedule | + | * Schedule |
- | * user can signup/ login or decide to use with local storage only | + | |
- | * user can create an account from garden data they' | + | * user can create an account from garden data they' |
- | * user can create beds | + | * user can create beds |
- | * user can create gardens | + | * user can create gardens |
- | * Need a list of available plants (internal) | + | |
- | * Need to be able to see compatible/ | + | * Need to be able to see compatible/ |
- | * Need to be able to filter by compatibility with multiple plants (internal) | + | * Need to be able to filter by compatibility with multiple plants (internal) |
- | * Find optimal planting schedule for a target bed (with at least one user picked crop) | + | * Find optimal planting schedule for a target bed (with at least one user picked crop) |
=== Should Have === | === Should Have === | ||
- | * When offline: | + | |
- | ** Get suggestions for where to plant crops | + | * Get suggestions for where to plant crops |
- | *** TODO: Figure out if this is possible offline. | + | |
- | *** Only for plants currently in local memory (eg that are already in beds). More plants is then just disabled. | + | |
- | * If we get the data, notify the user of maintenance tasks include watering, weeding, pruning, etc. | + | * If we get the data, notify the user of maintenance tasks include watering, weeding, pruning, etc. |
- | * Suggest plants based on distance between plants | + | * Suggest plants based on distance between plants |
- | * List suggestions for following plants for harvested beds | + | * List suggestions for following plants for harvested beds |
- | * Sharing/ | + | * Sharing/ |
- | * Add a crop entry | + | * Add a crop entry |
- | ** fill out form | + | |
- | ** should be validated | + | |
- | * validation of other users data for a specific climate (proofread, rate, comment, improve) | + | * validation of other users data for a specific climate (proofread, rate, comment, improve) |
- | ** flag trolls/ | + | |
- | * Keep track of nitrogen fixers/ | + | * Keep track of nitrogen fixers/ |
- | * Save edit history for OpenFarm data | + | * Save edit history for OpenFarm data |
- | * permaculture zones: | + | * permaculture zones: |
- | ** a garden can have zones | + | * a garden can have zones |
- | ** suggestions based on zones | + | * suggestions based on zones |
- | *** plant zone is dependent on how much attention they need/how often you harvest | + | * plant zone is dependent on how much attention they need/how often you harvest |
- | **** TODO: think about this, how to figure that out | + | * TODO: think about this, how to figure that out |
=== Cool to Have === | === Cool to Have === | ||
- | * Include types of beds required for a crop | + | |
- | * Get revenue from links for more information. | + | * Get revenue from links for more information. |
- | * Plant pictures | + | * Plant pictures |
- | * Print Shopping List | + | * Print Shopping List |
- | * modify the same garden by multiple users at the same time | + | * modify the same garden by multiple users at the same time |
- | * Have some visualization of garden beds with plants | + | * Have some visualization of garden beds with plants |
- | * Draw in current crops | + | * Draw in current crops |
- | * Gamification | + | * Gamification |
- | ** Levels/ | + | * Levels/ |
- | *** Contributor | + | * Contributor |
- | *** Expert farmer | + | * Expert farmer |
- | *** etc. | + | * etc. |
> TODO: Figure out where these attributes belong: Soil conditions, grow time, climate, sun direction relative to each bed, labor required for each plant, sun+water required, best season/time to plant, care frequency, nitrogen/ consumption | > TODO: Figure out where these attributes belong: Soil conditions, grow time, climate, sun direction relative to each bed, labor required for each plant, sun+water required, best season/time to plant, care frequency, nitrogen/ consumption | ||
Line 182: | Line 188: | ||
=== Minimal Viable Project === | === Minimal Viable Project === | ||
- | * The User should be able to select a minimum of two plants and the app will produce a result to list of plants in groups that are compatible with each other. | + | |
- | * It should only list small groups that are not contained in a bigger group | + | * It should only list small groups that are not contained in a bigger group |
- | ** Example: {Nasturium, Potato, Onion} = {Nasturium, Potato}, {Onion} != {Nasturium, Potato}, {Onion}, {Potato}, {Nasturium} | + | |
- | * Search by Common english name or binoial name in the same field | + | * Search by Common english name or binoial name in the same field |
- | ** If crop not found it should tell: "Plant not yet in the database or you wrote the name wrong :) - or you can try again using the binomial name" | + | * If crop not found it should tell: "Plant not yet in the database or you wrote the name wrong :) - or you can try again using the binomial name" |
- | * This should represent the function of creating multiple beds from a list of seeds/ | + | * This should represent the function of creating multiple beds from a list of seeds/ |
- | * TODO | + | * TODO |
- | ** Backend: Import plant data from PFAF database, import basic plant relationship data (firebase), create HTTP API call to get compatible groups from a big group of plants. | + | * Backend: Import plant data from practicalplants |
=== Detailed function description. === | === Detailed function description. === | ||
Line 196: | Line 202: | ||
User should choose between different guides (from openfarm.cc) for a crop that fits their needs | User should choose between different guides (from openfarm.cc) for a crop that fits their needs | ||
- | * When adding a crop to a bed, users have the option of selecting a guide available from openfarm | + | |
- | * Users can view the guide for a crop at any time from the crop details page | + | |
- | * Guides can be removed, added or changed to a crop in crop view (only one guide per crop) | + | * Users can view the guide for a crop at any time from the crop details page |
+ | * Guides can be removed, added or changed to a crop in crop view (only one guide per crop) | ||
== Offline and Online user experience == | == Offline and Online user experience == | ||
NEARLY the same UX (user experience) both offline and online! This is really important because people will need to use on mobile in their garden | NEARLY the same UX (user experience) both offline and online! This is really important because people will need to use on mobile in their garden | ||
- | * Things a user will most likely want to do while offline. Use command pattern for the actions and queue them up. They sync when the phone/ | + | |
- | ** Add a new bed | + | |
- | ** Add existing crops to that bed | + | |
- | ** Change the status of a crop | + | |
- | ** Change status of a task | + | |
- | ** Switch to any other bed in their garden | + | |
- | ** View a guide/ | + | |
== Suggestions == | == Suggestions == | ||
- | * Provide suggestions for adding specific crops to existing beds | + | |
- | ** User can ask for crop suggestions when adding crops to a garden or bed | + | * User can ask for crop suggestions when adding crops to a garden or bed |
- | * Provide suggestions for adding specific crops to a specific bed | + | * Provide suggestions for adding specific crops to a specific bed |
- | ** User can also ask for suggestions for crops to add to a specific bed | + | * User can also ask for suggestions for crops to add to a specific bed |
- | * Must have at least one user-selected crop to provide suggestions | + | * Must have at least one user-selected crop to provide suggestions |
== Notifications == | == Notifications == | ||
Notify users of tasks that should be done for each garden/ | Notify users of tasks that should be done for each garden/ | ||
- | * Email notifications | + | |
- | ** should be opt out by default | + | * should be opt out by default |
- | ** include weekly summary of upcoming tasks | + | * include weekly summary of upcoming tasks |
- | * Push notifications | + | |
- | ** Need to be enabled in browser (would only work on desktop) | + | * Need to be enabled in browser (would only work on desktop) |
- | ** include | + | * Include |
== Tasks and Actions == | == Tasks and Actions == | ||
- | * Right now, this would include planting, transplanting, | + | |
- | * Users can add custom tasks from a predefined set of actions (or " | + | * Users can add custom tasks from a predefined set of actions (or " |
- | ** Tasks are associated with a location, bed, or crop | + | * Tasks are associated with a location, bed, or crop |
- | ** Repeatable tasks | + | * Repeatable tasks |
- | * Mark tasks as complete, or postpone or ignore them | + | * Mark tasks as complete, or postpone or ignore them |
== Schedule == | == Schedule == | ||
Find optimal planting schedule for a target bed (with at least one user picked crop) | Find optimal planting schedule for a target bed (with at least one user picked crop) | ||
- | * When adding a crop, users can get suggestions for when to plant it based on the duration of growth | + | |
- | * Goal is to maximize the overall yield and allow for consistent harvest throughout the year | + | * Goal is to maximize the overall yield and allow for consistent harvest throughout the year |
Information accessible on timeline of different stages and locations of growth (i.e. when to grow in greenhouse and transplant them outside) | Information accessible on timeline of different stages and locations of growth (i.e. when to grow in greenhouse and transplant them outside) | ||
- | * Users can view the schedule for a location or bed as a chart | + | |
- | * Growth periods are shaded in bars, single events are represented as lines | + | * Growth periods are shaded in bars, single events are represented as lines |
- | * Should allow the user to see, at a quick glance, what is growing and when things can be harvested | + | * Should allow the user to see, at a quick glance, what is growing and when things can be harvested |
- | ** Also be able to identify gaps in the schedule which could be filled | + | * Also be able to identify gaps in the schedule which could be filled |
- | * Should also show information about compatibility interactions | + | * Should also show information about compatibility interactions |
- | ** Needs to be intuitive and simple to understand, obvious from one look at the schedule | + | * Needs to be intuitive and simple to understand, obvious from one look at the schedule |
== User Contributions == | == User Contributions == | ||
Line 258: | Line 265: | ||
Creating Guides should link into OpenFarm directly - Create Guide. | Creating Guides should link into OpenFarm directly - Create Guide. | ||
- | * pro: less work for developer | + | |
- | * contra: might be confusing for the user | + | * contra: might be confusing for the user |
Editing Guides should be put into powerplant " | Editing Guides should be put into powerplant " | ||
Editing Cropinformation should be edited in OpenFarm directly. | Editing Cropinformation should be edited in OpenFarm directly. | ||
Line 266: | Line 274: | ||
=== Terminology === | === Terminology === | ||
- | Location: Group of gardens whose permaculture zones are defined relative to a common zone 0 | + | **TODO** Create Seperate page to link to |
- | Garden: combination of beds in the same vicinity and permaculture zone | + | |
- | Bed: Section in a garden (can be a greenhouse, a pot or a patch of soil) | + | **Location**: Group of gardens whose permaculture zones are defined relative to a common zone 0 |
- | Crop: Specific instance of a crop that will be planted in a bed | + | |
- | Transplant: action of moving a crop from a pot (non-bed) to a bed | + | **Garden**: combination of beds in the same vicinity and permaculture zone |
- | Zone/ | + | |
+ | **Bed**: Section in a garden (can be a greenhouse, a pot or a patch of soil) | ||
+ | |||
+ | **Crop**: Specific instance of a crop that will be planted in a bed | ||
+ | |||
+ | **Transplant**: action of moving a crop from a pot (non-bed) to a bed | ||
+ | |||
+ | **Zone/ | ||
- | === 2. Provide a Data Flow Diagram of the system to show how these functions relate to each other. === | + | === Provide a Data Flow Diagram of the system to show how these functions relate to each other. === |
Data flow diagram for cropinformation/ | Data flow diagram for cropinformation/ | ||
Line 373: | Line 388: | ||
> TO DO: Describe what kind of manuals and what kind of help is needed for the software you will be developing. | > TO DO: Describe what kind of manuals and what kind of help is needed for the software you will be developing. | ||
- | List the user documentation components (such as user manuals, on-line help, and tutorials) that will be delivered along with the software.// | + | List the user documentation components (such as user manuals, on-line help, and tutorials) that will be delivered along with the software. |
- | Need to have user documentation. Usability will be severly | + | Need to have user documentation. Usability will be severely |
- | * User manual | + | |
- | * FAQ | + | * FAQ |
- | * First time user prompts | + | * First time user prompts |
- | * Community talking points | + | * Community talking points |
- | * Chat rooms (like FarmOS) | + | * Chat rooms (like FarmOS) |
- | * Tutorials for most exemplary tasks (Videos, ...) | + | * Tutorials for most exemplary tasks (Videos, ...) |
===== Specific Requirements ===== | ===== Specific Requirements ===== | ||
Line 395: | Line 410: | ||
[[https:// | [[https:// | ||
- | * Lots of rounded rectangles to contain components | + | |
- | * Font size standards based on Marvel prototype (maybe change to be based on screen size in the future) | + | * Font size standards based on Marvel prototype (maybe change to be based on screen size in the future) |
- | ** Main page title: 26pt | + | * Main page title: 26pt |
- | ** Subtitle: 18pt | + | * Subtitle: 18pt |
- | ** Body text: 14pt | + | * Body text: 14pt |
- | * Sidebar menu accessible from any screen which shows the current location and allows jumping to any screen above it in the hierarchy (All Gardens -> Garden Dashboard -> Bed Dashboard -> Crop) | + | * Sidebar menu accessible from any screen which shows the current location and allows jumping to any screen above it in the hierarchy (All Gardens -> Garden Dashboard -> Bed Dashboard -> Crop) |
- | * Gardens and Beds contain 3 subscreens (fragments? | + | * Gardens and Beds contain 3 subscreens (fragments? |
- | ** Dashboard, Beds/Crops, Schedule | + | * Dashboard, Beds/Crops, Schedule |
- | ** Dashboard shows relevant tasks | + | * Dashboard shows relevant tasks |
- | ** Beds/Crops shows all Beds/Crops contained within the Garden/ | + | * Beds/Crops shows all Beds/Crops contained within the Garden/ |
- | ** Schedule shows history of all past, present, and future crops for the Garden/ | + | * Schedule shows history of all past, present, and future crops for the Garden/ |
- | * Any time there is a title/ | + | * Any time there is a title/ |
- | ** Menu items: Edit, delete | + | * Menu items: Edit, delete |
- | ** This is the main mechanism by which user can change settings/ | + | * This is the main mechanism by which user can change settings/ |
=== View Description === | === View Description === | ||
Line 431: | Line 446: | ||
> TO DO: Describe: the connections between the product and other specific software components (name and version), | > TO DO: Describe: the connections between the product and other specific software components (name and version), | ||
- | * FarmOS | + | |
- | ** FarmOS users can provide the url of their server and save/load all of their data BESIDES crop guides and crop information from there | + | * FarmOS users can provide the url of their server and save/load all of their data BESIDES crop guides and crop information from there |
- | ** There will have to be a moderate amount of translation between powerplant data format and FarmOS data format | + | * There will have to be a moderate amount of translation between powerplant data format and FarmOS data format |
- | ** Rather than building a seperate FarmOS module, we will make our web app compatible with FarmOS | + | * Rather than building a seperate FarmOS module, we will make our web app compatible with FarmOS |
- | ** A FarmOS module could be possible, but requires much more time and expertise than it is worth at the moment | + | * A FarmOS module could be possible, but requires much more time and expertise than it is worth at the moment |
- | * Openfarm.cc | + | * Openfarm.cc |
- | ** Openfarm stores CropRelationships, | + | * Openfarm stores CropRelationships, |
- | ** Powerplant users can choose to register their accounts with Openfarm as well | + | * Powerplant users can choose to register their accounts with Openfarm as well |
- | ** Users who do this will be able to save/modify this data | + | * Users who do this will be able to save/modify this data |
- | ** All users (registered or not), while load this data from Openfarm | + | * All users (registered or not), while load this data from Openfarm |
> TO DO: Identify data items or messages coming into the system and going out and describe the purpose of each. | > TO DO: Identify data items or messages coming into the system and going out and describe the purpose of each. | ||
- | * FarmOS specs go here | + | |
- | * openfarm.cc specs go here | + | * openfarm.cc specs go here |
> TO DO: Describe the services needed. | > TO DO: Describe the services needed. | ||
Line 451: | Line 466: | ||
> TO DO: Identify data that will be shared across software components. | > TO DO: Identify data that will be shared across software components. | ||
- | * need to look at what FarmOS stores and what we store | + | |
- | | + | |
Line 459: | Line 474: | ||
TO DO: | TO DO: | ||
- | 1. Describe the requirements associated with any communication functions required by this product, including e-mail, web browser, network server communications protocols, electronic forms. | + | - Describe the requirements associated with any communication functions required by this product, including e-mail, web browser, network server communications protocols, electronic forms. |
- | + | | |
- | 2. Define any pertinent message formatting. | + | |
==== communication standards that will be used, such as FTP or HTTP. ==== | ==== communication standards that will be used, such as FTP or HTTP. ==== | ||
Line 505: | Line 520: | ||
=== List of Use case === | === List of Use case === | ||
- | * a user has an empty garden, and they want to know what they should plant | + | |
- | * a user has a non-empty garden, and they want to know what they should add to it | + | * a user has a non-empty garden, and they want to know what they should add to it |
- | * user wants to track their garden' | + | * user wants to track their garden' |
- | * user has some data they want to contribute | + | * user has some data they want to contribute |
- | * cool to have | + | * cool to have |
- | ** user wants to manage a garden with multiple people working on it | + | |
> TODO: Add more use cases | > TODO: Add more use cases | ||
Line 518: | Line 533: | ||
> TODO: Create use case diagrams involving each of the possible types of users | > TODO: Create use case diagrams involving each of the possible types of users | ||
- | + | > TODO: Convince openfarm to enhance companionship model or find a suitable ruby on rails developer | |
- | General | + | |
- | | + | |
| | ||
[[https:// | [[https:// | ||
+ | |||