Git Product home page Git Product logo

demo-dnd's Introduction

This document is a stripped down MVP version

Demo-DnD

Project Description

An app to coordinate stock requests between retail stores. Discuss and dispatch (DnD) is a play on click and collect (CnC)

Tech

This application uses NextJS and MongoDB.

Dev Setup

  • npm install
  • Need to have a pronto-database.csv file in the /api/prontoDatabase folder

Challenges

This has been attempt number 6 to build this project. The requirements have changed slightly due to some evolution at the stores- I can take advantage of mobile scanners that are running android. Burnout is the thing to avoid so keeping the scope small and focused is key.

The previous versions of this project used the MERN stack- I miss how clear cut some things were. Next is doing lots of things that I don't understand deeply how it works.

Some of the next challenges that I've encountered:

  • Sending data between client and server components (only plain JS objects are allowed)
  • Caching

The solution to these is time spend in the docs and time spent with Next.

Defining the problem:

When retail stores want to communicate a stock request to the Seven Hills warehouse location, google sheets are used. The use of google sheets has the following issues:

  • not intuitive. For example- putting all product information (sku, qty, description) within a single cell and using variable formatting
  • prone to errors (no form validation)
  • does not integrate with existing tech (scanners and shipping software)
  • The overall process relies on manual, disconnected steps that should be part of a linked system.

What google sheet does well:

  • One centralised location for the seven hills team to view all requests
  • Reliable / robust text transfer
  • Simple process

The use of google sheets represents an area where an application could step in the improve the overall process.

Goals

  1. Replace the use of googlesheets when paddy pallin retail stores make a request to the seven hills warehouse
  2. Demonstrate value of a bespoke app

For the app to be successful, it needs to be an improvement on the existing system and gain user acceptance. Key areas where I can see how an app will improve the overall workflow:

  • Scan to complete picking using zebra scanners
  • More intuitive / user friendly than a spreadsheet

Stakeholders

  • Retail store staff - Improve efficiency and reduce errors. Tool more intuitive and easier to use than google sheet
  • Seven Hills staff - Improve efficiency and reduce errors
  • Customers - Reduce errors and improved overall experience

MVP User Stories

Customer

  • a customer will be assigned a order reference number that they can quote to help staff person find request status

Seven Hills staff

  • a seven hills person can view all orders in a single dashboard view #17
  • a seven hills person can scan barcodes to complete picking #19
  • a seven hills person can generate a shipping label from the app via details entered from staff person
  • a seven hills person can easily tell app which orders are being packed at once
  • a seven hills person can mark an item oos

Retail staff person

  • a store staff person can create a customer request #2
  • a staff person can search for products (skus) via item description #3
  • a staff person can scan in a barcode or SKU directly #4
  • a staff person can choose between deliver to store and ship direct to customer #5
  • a staff person can see a dashboard of past orders, pending orders #6
  • a staff person can easily find where a person's request is up to (in transit w/ tracking or ETA, arrived in store with location notes)
  • a staff person can check SOH via app (public website endpoint) and get an idea where stock might come from

Functional Requirements

  • Secure login

Validation and Testing

TBD

Test Plan

Test Cases

Validation Criteria

demo-dnd's People

Contributors

capsap avatar

Watchers

 avatar

demo-dnd's Issues

- a store staff person can create a customer request

what's the min info we need to create / make a request?

  • requesting store
  • customer info (name, address, email, phone)
  • request info (qty, description, sku)

also need a db + db route to POST request

  • set up a mongo db
  • connect to db
  • add a route to handle create POST

What should happen after creating request?

  • - some ui to let the user know?

What is missing?

UX improvement: Picking screen

I need to test this with users. There are problems with this screen / business logic currently.

Specific problems i can identify:

  • It's not clear to user how many items are left to pick, how many are TODO.
  • Buttons should look like buttons, and be disabled when user cannot submit
  • Error message should clear
  • User should not be able to pick an order which has been already picked?

lt's not clear how to resolve items that cannot be fulfilled.

Also need to think more about the mobile device- how mobile friendly is the page?

a seven hills person can scan barcodes to complete picking

the workflow im thinking is user hits a button, goes to a picking / scanning screen. A single list of all the items to pick, and user can scan barcode to pick

  • create a context
  • create function to save context
  • create picking page that gets data from context
  • user can scan to pick
    • function to handle checking sku / barcode against picking
      • need something to convert barcode into sku
      • find one request only where sku is correct and it still needs to be picked
      • update this one request only, and update state
      • user can manually "scan" an item without barcde
      • user can undo a scan
    • update context from picking page (or write to db with completed picking results)
      • user can mark an order as short picked.
      • update relevant typescript things (db interface, etc)
  • Alert user when a scan does not find any items. (wrong product scanned)

- staff person can search for products (skus) via item description

i think what i want is a fuzzy search. data set might be around 10k skus?

and the basic version im thinking is: create a search box, user enters in some keywords. some results appear. when user selects desired result, other fields populate (sku, description)

  • should i also have a seperate size and colour field? (new fields alongside sku and description?)
    • i think i'll wait for user feedback

updated todos

  • create new search box at the top level (above items)
  • function to handle search
    • import data from csv into sql
  • display results
  • populate fields when user chooses a result

- staff person can choose between deliver to store and ship direct to customer

so how to handle this with state etc?

on the request ive got the below fields. so i could put the store address in the address field. or add a new property saying something like

storeOrDirect: "store" || "direct"

export type IStoreRequest = {
_id: string;
name: string;
phone: string;
requestingStore: string;
email: string;
address: string;
items: Item[];
status: "new" | "issue picking" | "ready to post" | "posted";
ibt: string;
tracking: string;
updatedAt: string;
};

BUG: 2 requests with same sku is picked as one

when a single request has multiple items with the same sku, each individual item is marked as scanned. Only one of the items should be incremented as scanned. Increment and decrement buttons also have this bug

- a seven hills person can view all orders in a single dashboard view

just do 1 simple card based for seven hills. view all todos.

why does seven hills need a dashboard?

  • to give a sense of control to user; this dashboard will tell user that there's some work
  • there needs to be a place to see everything

What info is important to show in the card?

  • the requesting store
  • customer name (something to help identify requests.
  • items

some layout ideas:

  • Accordion List
  • nested list
  • Card-Based Layout

todos for this issue:

  • handle getting the requests
  • display requests

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.