@@ -0,0 +1,165 @@
1++++
2+
3+title = "Plug"
4+date = "2022-09-1"
5+
6+[taxonomies]
7+grant_type = ["Proposal"]
8+grant_category = ["App Dev"]
9+
10+[extra]
11+image = ""
12+description = "Sell a catalog of physical goods from your Urbit"
13+reward = "5 stars"
14+assignee = ["~hastyp-patmud"]
15+champion = ["~novlud-padtyv"]
16+grant_id = "P0156"
17+completed = false
18+canceled = false
19+link = ""
20+
21++++
22+
23+# Elevator Pitch
24+Plug is a lightweight way to list and sell a small catalog of physical goods on Urbit — Plug your merch!
25+
26+# Purpose
27+
28+Commerce is one of the most important needs fulfilled by the internet today. While there is a long way to go in terms of a complete solution for businesses at scale. There is no reason why Urbiters shouldn’t be able to move Etsy stores or Ebay listings onto Urbit, and sell to their friends on network.
29+
30+Plug is that solution: A lightweight way to list products and take payments, storing your data on your Urbit where it can’t be taken away or sold back to you as a “Premium Tier”.
31+
32+The goal of plug is to immediately enable users that want to sell one or a handful of things online today, while keeping in mind how it might accommodate adjacent systems built around it later — when it comes time to build tooling for more robust operations.
33+
34+# Scope
35+
36+There are many systems used by ECommerce stores today:
37+* **Storefront** — A interface for listing products, and checking out; often includes other media and content (I.e. pages), and things like discounts and coupons
38+* **Product Information Management (PIM)** — An interface for managing things like product listings, variants, product metadata, product dimensions etc
39+* **Inventory** — An interface and associated reports for managing quantity and supply of various products, variants and SKUs contained in a PIM
40+* **Warehouse Management System (WMS)** — A set of interfaces for tracking the handling of inventory items and related metadata (location, expiration, damage etc)
41+* **Fulfillment Management System (FMS)** — An set of interfaces for packing and shipping pieces of inventory, as well as tracking and notifications
42+* **Procurement / ERP** — A system for generating POs and ordering products from your suppliers; often includes forecasting
43+* **Marketplace** — A system which accommodates the abstraction of having multiple sellers (and their associated stores and catalogs) rather than just one; applicable at all layers of the data model
44+
45+As you can see the scope is rather large. Plug is only intended to solve for a subset of this upon delivery, however its data models should be aware of these adjacent needs and take pains to future proof themselves for easy extension. A brief description of what Plug will cover is as follows:
46+* A **PIM Interface** to create, edit, delete basic product listings — title, images, description, id — no variants, metadata, complex specs etc
47+* A **storefront** to display product listings and a **checkout** (Bitcoin, Fiat); additional site content will be minimal
48+ * *Note: implementation will use JAMStack to insert web2 fiat payment rails for now, with the intent to upgrade once a native solution is available*
49+
50+While by no means comprehensive, this targeted selection of tooling should be complete for the set of use cases we are targeting: *seller’s who want to list individual items, or a small catalog*
51+
52+# Design and Implementation
53+
54+## User Segments
55+* Sellers
56+* Buyers
57+
58+## User Stories
59+1. As a **seller**, I need to be able to store product information on my Urbit, so that I own and control the content for my site
60+2. As a **seller**, I need to be able to create, update, and delete product information on my Urbit, so that I can poke and scry to manage my content
61+3. As a **seller**, I need to be able to add a product listing in a GUI, so that my product can be made available to buyers
62+4. As a **seller**, I need to be able to remove a product listing in a GUI, so that it does not keep getting bought after it is sold
63+5. As a **seller**, I need to be able to update product listings title, description and images in a GUI, so that I can make listings more enticing / error free
64+6. As a **seller**, I need to be able to update the price of a listing in a GUI, so that my price remains competitive
65+7. As a **seller**, I need to be able to serve a store, so that I can share product listings with buyers
66+8. As a **buyer**, I need to see product listings so that I can shop for what I want
67+9. As a **buyer**, I need to be able to add items to cart, for later purchasing
68+10. As a **seller**, I need customers to be redirected to an external checkout page, so that one of my various payment processors can validate the cart and collect payment
69+11. As a **buyer**, I need to be able to check out, so that I get my Items
70+12. As a **buyer**, I need to be able to pay with fiat, so that my bank can show my NSA Agent my conspicuous spending 🕵🏻♂️ 😉
71+13. As a **seller**, I need to be able to store bitcoin carts in my urbit, so that they can be made available in a GUI
72+14. As a **seller**, I need bitcoin carts to contain order info, that I know what to ship
73+15. As a **buyer**, I need bitcoin carts to contain payment/price info, that I know what to pay and which address to send to
74+16. As a **buyer**, I need to be able to pay with bitcoin wallet, so that my indiscretions remain private and decentralized 👌
75+17. As a **seller**, I need to be able to see bitcoin carts in a GUI, so that I know when orders come in
76+18. As a **seller**, I need to be able to see when a buyer has paid a bitcoin cart, so that I know to ship the items
77+
78+## Technical Reqs
79+
80+System will be desgned to send users to an external checkout; for the purposes of this grant, this will be a 3rd party web2/JS payment processor, in future work this boundary will be replaced with an Urbit native checkout application (either by gall or a web2/glob). In both cases the boundary/API contract should be similar. Will work with Tirrel on the design to minimize friction down the line for this future work.
81+
82+## Engineering Design
83+
84+### Containter Descriptions
85+The implementation will have 3-4 distinct parts
86+* **PIM Backend** — a gall agent, essentially a product listing DB and associated pokes/scries for CRUD
87+* **PIM Frontend** — A globbed React (or Vue?) app; list of existing listings, form for adding listings, form for editing listings etc; image storage in S3 (or other URL)
88+* **A web storefront** — A (web2?) storefront built and served from your urbit via a gall agent and sail; displays product, and lets a user check out; payment processing via JamCart or SnipCart
89+* **Bitcoin Cart backend?** — a gall agent, handles interaction with bitcoin wallet to validate a cart has been paid (need some direction here)
90+
91+### System Context (C1)
92+
93+
94+
95+### Container Interactions (C2)
96+
97+
98+
99+# Milestones
100+
101+## 1. Data Design + PIM Backend
102+**Expected Completion**: Early Sept 2022
103+**Deliverables**:
104+* Engineering Designs for the system, i.e. C4 and preliminary Data Models
105+* A Gall Agent, User Stories 1-2
106+**Payment**: 1 Star
107+
108+## 2. UI Design + PIM Frontend
109+**Expected Completion**: Late Sept 2022 (~aiming at assembly demo)
110+**Deliverables**:
111+* Greybox Skteches of the PIM UI Designs
112+* Globbed JS App, User Stories 3-6
113+**Payment**: 1 Star
114+
115+
116+## 3. Sail Storefront w/ fiat payment
117+**Expected Completion**: Oct 2022
118+**Deliverables**:
119+* Greybox Skteches of the Store UI Designs
120+* A Gall Agent + a sail frontend,
121+* JAM Stack cart integration
122+* User Stories 7,8
123+**Payment**: 1 Star
124+
125+## 4. Fiat Checkout Integration
126+**Expected Completion**: Nov 2022
127+**Deliverables**:
128+* 2 sets ofIntegration design docs and API contract: one for this grant and 1 for the later urbit native integration
129+* User Stories 9-11
130+**Payment**: 1 Star
131+
132+## 5. Bitcoin Cart Integration
133+**Expected Completion**: Dec 2022
134+**Deliverables**: A Globbed JS App + additional work on sail store, User Stories 12-17
135+**Payment**: 1 Star
136+
137+# About Me
138+
139+I am a seasoned full stack application developer. Although my initial training was in design and business, I keep getting more technical out of necessity. I’ve been an IC, an Engineering Manager, and a PM in the past.
140+
141+Most notably I spent 2.5 years leading a team in charge of Warehousing and Supply chain Engineering at a Unicorn Delivery App startup, where I led a team that designed and built their WMS, and ERP systems from pre-valuation to 11B+.
142+
143+I also have my own ecommerce store nowadays so I am very familiar with the space. Ideally I would like to get paid to port all of the SaaS products I use onto Urbit, so that myself and others can start serving our stores from there and take our data away from shopify and amazon.
144+
145+I believe I am uniquely positioned to execute on this.
146+
147+I am already somewhat familiar with hoon, gall, ames and http-api. I built a habit tracker app that can be found at `web+urbitgraph://group/~hastyp-patmud/ulyssess`
148+
149+# Future Work
150+
151+Although this project is scoped to be SLC (simple, loveable, complete) for the purposes of this grant, here is a preview of what a tentative roadmap of follow on projects could look like:
152+**Plug** — Sell a Thing
153+* Product Listing
154+* Payment
155+**Hawk** — Display Your Wares
156+* Full Cart
157+* PIM including Variants, meta, specs etc
158+**Vend** — Track your merchandise
159+* Desktop Inventory system
160+**Ware** — Manage your physical business
161+* WMS, including PO receipt, Counting, moving, damaging, expiring inventory pieces
162+**Flea** — Invite sellers to your marketplace
163+* MarketPlace/Multiple Sellers
164+**Grab** — Manage your supply chain
165+* Procurement/ERP, PO generation, forecasting, accounting estimates etc