cli | ||
client | ||
devConfig | ||
public | ||
server | ||
site | ||
test | ||
utils | ||
.babelrc | ||
.eslintignore | ||
.eslintrc | ||
.gitignore | ||
.npmignore | ||
.nvmrc | ||
.sequelizerc | ||
customize.md | ||
fullstart.md | ||
LICENSE | ||
nginx_example_config | ||
package-lock.json | ||
package.json | ||
README.md | ||
server.js | ||
webpack.config.js | ||
yarn.lock |
Spee.ch
Spee.ch is a web app that reads and publishes images and videos to and from the LBRY blockchain. You are encouraged to contribute to the shared code base, or fork it and make it your own.
You can create your own custom version of spee.ch by installing this code base and then creating your own custom components and styles to override the defaults. (More details/guide on how to do that coming soon.)
Quickstart
note: this is the quickstart guide, for an in-depth step-by-step overview visit the fullstart guide.
Install System Dependencies:
- node
- MySQL
lbry
daemon- note: retrieve an address from the daemon and send your wallet a few credits (or join us in the #speech discord channel and we will send you a few)
- FFmpeg
Clone this repo
$ git clone https://github.com/lbryio/spee.ch.git
Change directory into your project
$ cd spee.ch
Install node dependencies
$ npm install
Create the config files using the built-in CLI
$ npm run configure
Build & start the app
note: make sure lbry is running in the background before proceeding
$ npm run start
View in browser
- Visit http://localhost:3000 in your browser
Customize your app
Check out the customization guide to change your app's appearance and components
(optional) add custom components and update the styles
- Create custom components by creating React components in
src/views/
(further instructions coming soon) - Update the CSS by changing the files in
public/assets/css/
(further instructions and refactor coming soon)
(optional) Syncing the full blockchain
- Start the
spee.ch-sync
tool available at billbitt/spee.ch-sync - This is not necessary, but highly recommended. It will decode the blocks of the
LBRY
blockchain and add the claims information to your database's tables
API
/api/claim/publish
method: POST
example:
curl -F 'name=MyPictureName' -F 'file=@/path/to/myPicture.jpeg' https://spee.ch/api/claim/publish
Parameters:
name
(required)file
(required) (must be type .mp4, .jpeg, .jpg, .gif, or .png)nsfw
(optional)license
(optional)title
(optional)description
(optional)thumbnail
URL to thumbnail image, for .mp4 uploads only (optional)channelName
channel to publish too (optional)channelPassword
password for channel to publish too (optional, but required ifchannelName
is provided)
response:
{
"success": <bool>,
"message": <string>,
"data": {
"name": <string>,
"claimId": <string>,
"url": <string>,
"showUrl": <string>,
"serveUrl": <string>,
"lbryTx": {
"claim_address": <string>,
"claim_id": <string>,
"fee": <number>,
"nout": <number>,
"tx": <string>,
"value": <number>
}
}
}
/api/claim/availability/:name
method: GET
example:
curl https://spee.ch/api/claim/availability/doitlive
response:
{
"success": <bool>, // `true` if spee.ch successfully checked the claim availability
"data": <bool>, // `true` if claim is available, false if it is not available
"message": <string> // human readable message of whether claim was available or not
}
Contribute
Stack
The spee.ch stack is MySQL, Express.js, Node.js, and React.js. Spee.ch also runs lbrynet
on its server, and it uses the lbrynet
API to make requests -- such as publish
, create_channel
, and get
-- on the LBRY
network.
Spee.ch also runs a sync tool, which decodes blocks from the LBRY
blockchain as they are mined, and stores the information in MySQL. It stores all claims in the Claims
table, and all channel claims in the Certificates
table.
Architecture
-
cli/
contains the code for the CLI tool. Running the tool will create.json
config files and place them in theconfig/
folderconfigure.js
is the entry point for the CLI toolcli/defaults/
holds default config filescli/questions/
holds the questions that the CLI tool asks to build the config files
-
client/
contains all of the client code- The client side of spee.ch uses
React
andRedux
client/src/index.js
is the entry point for the client side js. It checks for preloaded state, creates the store, and places the<App />
component in the document.client/src/app.js
holds the<App />
component, which contains the routes forreact-router-dom
client/src/
contains all of the JSX code for the app. When the app is built, the content of this folder is transpiled into theclient/build/
folder.- The Redux code is broken up into
actions/
reducers/
andselectors/
- The React components are broken up into
containers/
(components that pull props directly from the Redux store),components/
('dumb' components), andpages/
- spee.ch also uses sagas which are in the
sagas/
folders andchannels/
- The Redux code is broken up into
client/scss/
contains the CSS for the project *
- The client side of spee.ch uses
-
client_custom
is a folder which can be used to override the default components inclient/
- The folder structure mimics that of the
client/
folder - to customize spee.ch, place your own components and scss in the
client_custom/src/
andclient_custom/scss
folders.
- The folder structure mimics that of the
-
server/
contains all of the server codeindex.js
is the entry point for the server. It creates the express app, requires the routes, syncs the database, and starts the server listening on thePORT
designated in the config files.server/routes/
contains all of the routes for the express appserver/controllers/
contains all of the controllers for all of the routesserver/models/
contains all of the models which the app uses to interact with theMySQL
database.- Spee.ch uses the sequelize ORM for communicating with the database.
-
tests/
holds the end-to-end tests for this project- Spee.ch uses
mocha
with thechai
assertion library - unit tests are located inside the project in-line with the files being tested and are designated with a
xxxx.test.js
file name
- Spee.ch uses
Tests
- This package uses
mocha
withchai
for testing. - Before running tests, create a
testingConfig.js
file indevConfig/
by copyingtestingConfig.example.js
- To run tests:
- To run all tests, including those that require LBC (like publishing), simply run
npm test
- To run only tests that do not require LBC, run
npm run test:no-lbc
- To run all tests, including those that require LBC (like publishing), simply run
URL formats
Spee.ch has a few types of URL formats that return different assets from the LBRY network. Below is a list of all possible URLs for the content on spee.ch
- retrieve the controlling
LBRY
claim:- https://spee.ch/
claim
- https://spee.ch/
claim
.ext
(serve)
- https://spee.ch/
- retrieve a specific
LBRY
claim:- https://spee.ch/
claim_id
/claim
- https://spee.ch/
claim_id
/claim
.ext
(serve)
- https://spee.ch/
- retrieve all contents for the controlling
LBRY
channel- https://spee.ch/
@channel
- https://spee.ch/
- a specific
LBRY
channel- https://spee.ch/
@channel
:channel_id
- https://spee.ch/
- retrieve a specific claim within the controlling
LBRY
channel- https://spee.ch/
@channel
/claim
- https://spee.ch/
@channel
/claim
.ext
(serve)
- https://spee.ch/
- retrieve a specific claim within a specific
LBRY
channel- https://spee.ch/
@channel
:channel_id
/claim
- https://spee.ch/
@channel
:channel_id
/claim
.ext
(serve)
- https://spee.ch/
Bugs
If you find a bug or experience a problem, please report your issue here on GitHub and find us in the lbry discord!
Issue tags in this repo
level 1
Issues that anyone with basic web development can handle; little-to-no experience with the spee.ch codebase is required.
level 2
Familiarity with web apps is required, but little-to-no familiarity with the lbry daemon is necessary
level 3
Familiarity with the spee.ch code base and how the lbry daemon functions is required
level 4
Issues with lbry (e.g. the spee.ch wallet, lbrynet configuration, etc.) that require strong familiarity with the lbry daemon and/or network to fix. Generally these issues are best suited for the lbry
protocol team
but are reported in this repo because they are part of the spee.ch implementation