This project is deprecated. A newer version built with MeteorJS and AngularJS v1 can be found here.
v 0.4.0
Software for managing a local food co-op. This web app is built with MongoDB, Express, Node.js and AngularJS v1.
A live site can be found here.
Joining the co-op store is easy and secure. A potential member can join either as a producer member or customer member. The main differences being producers have a public producer profile to manage and can upload products for sale in the store. Both producer and customer members can shop in the store.
To ease transportation costs ordering is done on a fixed and customizable schedule in our dynamic and powerful store with an intuitive shopping cart.
The admin page lets an admin user create new ordering cycles by specifying a start date (and time though this is usually midnight local time), shopping start, shopping stop and delivery day.
Here is what each of those controls in the store:
Start signifies the start of the cycle and must be unique though can overlap with shopping start. This date sets the default cycle for uploading products.
Shopping Start to Shopping Stop control when a user can and cannot shop for that cycle. Adding items to the shopping cart outside of the shopping start and shopping end date range is forbidden. The Shopping Stop event triggers invoicing customers for items in their cart and sending delivery requests to producers. Checkout, thus is automatic.
Delivery Day is when producers bring all their goods to a central location for sorting and packing and for customers to either pick up or be sent out to more remote customers.
The store shows all published products. When a user wishes to withdraw a product from the store catalog, they simply de-select the the check box at the top of the product edit page.
A one-click add-to-cart system is in place and there is no checkout necessary. Once an item is added to a user's cart they can change the quantity they wish to purchase, quick-link to reading more about the product again or delete the product entirely from their cart.
Cart's are only mutable between the shopping start and shopping stop dates as the customer is invoiced when the Shopping Stop event is triggered.
A producer is very flexible with the ability to sell products through the store. They set their own prices (the co-op adds a markup though that can be set in the server/coopConfig.js file), units and quantity available. They also have a Textangular Wysywig Editor for making a rich product description.
A product image can be uploaded.
The product is then available for sale until it either sells out or is unpublished from the store catalog.
Whole animal sales are accompanied by a butchery form. When an order is placed, the producer instantly receives an email with the butchery instructions.
A producer can see details for each order made and products they've sold in the store and have some very useful statistics at their finger tips.
- Total number of products sold
- Most Popular Product
- Most frequent customer
- Customer that spent the most
- Best cycle for sales
All these statistics can be confined within start and end dates for greater analysis.
A producer receives an invoice from the co-op on behalf of customers and these are marked as income while purchases are invoiced to a buyer and need to be paid.
Invoices are flagged by status: Paid, un-paid, overdue, cancelled, to be refunded.
An admin can see all invoices while a user can see just the ones for them.
If a user has credit, it is automatically factored into their purchases invoice or their product's purcahsed invoice for a producer member.
Invoices can be paid by internet banking or credit card with txtpay.
A real-time message board feature allows users to post community bulletins, recipies, requests, etc.
People care about where their food comes from, so the co-op gives a way for site visitors to meet the producers. Our directory lists producers and links to their profile pages. A producer can customize their profile with a logo, contact details, and a rich content company description and bio. A google map showing their address is available for producers wishing to make their business address easily available.
Admin tools exists for managing most co-op features.
- Manage Users and their permissions. An admin can initialize a password reset for a user but can't change their password specifically.
- See all orders for a specific cycle. The orders are listed by producer, by customer and by refrigeration/frozen needs.
- Create and edit order cycles.
- See all invoices and change their status (from un-paid to paid for example)
- Add more E2E tests for common user tasks
- Add more unit tests for both client-side and server-side controllers
- Add a way to manage mailchimp subscription right from our site.
- have a live map showing markers where producers live on producer list page. Currently lat long data is already stored for users.
- for Co-op presentations and promotional/educational events have a place for those to be promoted on the website
- list other sources for local food in Northland
- Develop a list of regions that members can belong to and then filter shopping to their regions. This would allow multiple regions to buy at the same time or possibly on different schedules.
- integrate a method of searching for producers near a member.
Dependencies:
- Node.js v0.10 or later
- Mongodb v2.6 or later
- Redis v2.8 or later
You need to have node.js installed on your machine to run the site. We develop on 0.10 so if you run into issues, try using that version.
Install the necessary modules:
npm install -g grunt-cli
npm install
Run Mongodb and Redis
mongod
redis-server
Then install sample data from the database with
mongorestore dump
This will give you access to a collection of sample users, sample products, categories and certification types.
To install the client-side dependencies we've used Bower.
bower install
To start the server:
grunt dev | bunyan
Then go to localhost:4001 to see the site.
Browser-based Admin tools exist for most major aspects of running a co-op.
To edit most other options edit the variables in server/coopConfig.
You'll also need to create a config.js file or edit the emailer.js file to use your own gmail credentials.
To run server-side unit tests make sure you have node-jasmine installed.
npm install -g jasmine-node
Then run the following command
jasmine-node server/spec