refining spec into markdown file
This commit is contained in:
BIN
spec/chart.png
Normal file
BIN
spec/chart.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 816 KiB |
@@ -37,6 +37,9 @@ UpFrontPaymentSetup
|
||||
UpFrontPaymentWatcher
|
||||
OnDeliverPaymentSetup
|
||||
OnDeliverPaymentWatcher
|
||||
FreelancerPayOut
|
||||
deliveryHandler
|
||||
"Download Link Maker"
|
||||
}
|
||||
|
||||
subgraph foreign {
|
||||
@@ -125,5 +128,10 @@ deliveryHandler -> OnDeliverPaymentSetup [label="notify that this will require p
|
||||
OnDeliverPaymentWatcher -> Freelancer [label="Notification that payment for commission has been recieved"]
|
||||
OnDeliverPaymentWatcher -> {"Email Server"} -> Customer [label="Final Product delivered"]
|
||||
|
||||
//Set up system for payouts to users
|
||||
|
||||
{OnDeliverPaymentWatcher deliveryHandler} -> "FreelancerPayOut"
|
||||
"FreelancerPayOut" -> {Stripe BTCPayServer} [label = "Send a call out to send money to the freelancer"]
|
||||
{Stripe BTCPayServer} -> "FreelancerPayOut" [label = "Confirmed money has been sent to user"]
|
||||
"FreelancerPayOut" -> "Freelancer" [label = "Notification money has been sent"]
|
||||
}
|
||||
|
87
spec/spec.md
Normal file
87
spec/spec.md
Normal file
@@ -0,0 +1,87 @@
|
||||
|
||||
# Concepts
|
||||
|
||||
## Freelancer
|
||||
|
||||
Freelancers are users of the site who hold accounts on the site. These users will sell labor through the site. Freelancers will store Stripe account information and crypto wallet addresses for payment.
|
||||
|
||||
Freelancers will have "profiles" of data they wish to display to the public. This data should be very maluable, ideally consisting of a plain text description along with a freelancer-defined Key-Pair for information.
|
||||
|
||||
Freelancers ought to be pure data. They should include:
|
||||
|
||||
Commission Limit - The maximum amount of commissions that a freelancer wishes to take. Once this limit is reached, a freelancher's commissions will shut down.
|
||||
Templates - A list of templates that a freelancer uses.
|
||||
|
||||
|
||||
## Customer
|
||||
|
||||
Customers are any users of the site who do not hold an account. Ideally, they will be the ones purchasing labor from freelancers.
|
||||
|
||||
## Templates
|
||||
|
||||
Templates are prepared and defined descriptions of jobs, with payments, that Freelancers furnish and offer to the public. They are easy, cookie cutter listings that the public may purchase for a predefined amount of money.
|
||||
|
||||
## Commission Request Database
|
||||
|
||||
This database will house all commissions that take place on the site. Each entry must have the following data:
|
||||
$requestID - A unique ID given to the request. Likely can be increimental.
|
||||
$customerEmailAddress - The Customer's email address
|
||||
$freelancer - The requested freelancer
|
||||
$templateName - The Template name, if any, that is being used. N/A Otherwise.
|
||||
$currencyPreference - Preference for currency provided. USD (or similar) for Stripe, Various shortening of crypto coins (such as BTC, ETH, XMR) for BTCPayServer.
|
||||
$priceUpFront - The amount of money that the customer is to be charged before a freelancer starts working.
|
||||
$priceOnDeliver The amount of money that the customer is to be charged after the freelancer finishes working (required for payment-to-recieve a product).
|
||||
$requestDescription - The description of the request.
|
||||
$accepted - If the freelancer has accepted to do a request or not. Ideally has three states, true, false, and undecided, but two should suffice.
|
||||
$upFrontInvoiceID - the ID of the up front invoice (for contacting BTCPayServer or Stripe). Set to N/a if not applicable.
|
||||
$onDeliverInvoiceID - the ID of the invoice (for contacting BTCPayServer or Stripe). Set to N/a if not applicable.
|
||||
$upFrontPaid - A boolean representation of if the up-front Payment has been paid.
|
||||
$onDeliverPaid - A boolean representation of if the on-Deliver Payment has been paid.
|
||||
|
||||
# Interface
|
||||
|
||||
## Customer
|
||||
|
||||
### "/"
|
||||
|
||||
"/" should return the main page of the site based off an HTML template provided to the program.
|
||||
|
||||
Ideally, the only interaction on this page will be with freelancer "Profiles", which may be selected by the end user to view more details about commissioning said person.
|
||||
|
||||
### /customer/$freelancer/
|
||||
|
||||
This page should consist of all the information about a freelancer that the freelancer has decided to show. This includes contact information, pricing, templates, and anything else. Freelancers should be given a lot of sway with what they wish to put here.
|
||||
|
||||
See the freelancer section under concepts for more information of what this should be like.
|
||||
|
||||
### /customer/$freelancer/template/$templateName
|
||||
|
||||
This will provide an HTML rendering of a Freelancer's posted template along with the ability to purchase the template.
|
||||
|
||||
### "/customer/$freelancer/template/$templateName/request"
|
||||
|
||||
A customer who wishes to request a freelancer with an open template must provide an email address, a name, and a description. Optionally, the user may provide auxiliary contact information (such as a Discord account, a Skype account, a Matrix account, a Github account, etc.).
|
||||
|
||||
This information should be stored in a database of commission requests. A request should also be emailed out to the freelancer.
|
||||
|
||||
## Freelancer
|
||||
|
||||
### "/freelancer/inbox"
|
||||
|
||||
The inbox will be a simple list representation of commissions a freelancer has, ideally highlighting new ones. This web interface need not be complex for the back-end work currently, but it should be able to easily be stylized with simple CSS.
|
||||
|
||||
#### "/freelancer/inbox/$requstID"
|
||||
This will show the actual formatted message that $requestID contains.
|
||||
|
||||
### "/freelancer/requests/$requestID/accept"
|
||||
|
||||
Sending a request to this endpoint will tell the back end that
|
||||
|
||||
### "/freelancer/requests/$requestID/decline"
|
||||
|
||||
### POST
|
||||
|
||||
# HTML Template
|
||||
|
||||
HTML Templates should be able to access loaded data of freelancers through some type of variable name. An HTML Assembler should then fill in the variable with any requested data.
|
||||
|
@@ -1,28 +0,0 @@
|
||||
Commission request data:
|
||||
$requestID
|
||||
$customerEmailAddress
|
||||
$freelancer
|
||||
$templateName
|
||||
$currencyPreference
|
||||
$priceUpFront
|
||||
$priceOnDeliver
|
||||
$requestDescription
|
||||
$accepted
|
||||
$upFrontPaid
|
||||
$onDeliverPaid
|
||||
$invoiceID
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
Vendors will be stored ideally in a file, or on a DB if necessary
|
||||
Vendors will provide contact information to set up a commission and the terms of it (Ideally email will have primacy here)
|
||||
Vendors can set up "template commissions". These template commissions can just be a link easily embedable anywhere for requesting a quote
|
||||
Quote requests will require an email address, a name, and a description.
|
||||
If approved, an email of an invoice will be sent to the requester
|
||||
If denied, an email will be sent to the requester
|
||||
If in flux (more info needed perhaps), an email with further elaboration should be sent by the freelancer
|
Reference in New Issue
Block a user