cli | ||
client | ||
client_custom | ||
config | ||
devConfig | ||
public | ||
server | ||
test | ||
utils | ||
.babelrc | ||
.eslintignore | ||
.eslintrc | ||
.gitignore | ||
.npmignore | ||
.sequelizerc | ||
LICENSE | ||
package-lock.json | ||
package.json | ||
README.md | ||
server.js | ||
webpack.config.js |
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.)
Quick start
Prepare your environment
Install Node
Start MySQL
- install mysql
- create a database
- save the
database
,username
, andpassword
someplace handy
Start LBRY
- install the
lbry
daemon - start the
lbry
daemon - retrieve an address from the daemon and send your wallet a couple credits (or join us in the #speech discord channel and we will send you a few)
Install ffmpeg
Clone this repo
$ git clone https://github.com/lbryio/spee.ch.git
Build and Start the App
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 the app (transpile source with babel and bundle with webpack)
$ npm run build
start the app
$ npm run start
View in browser
visit localhost:3000 in your browser
(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 reccomended. It will decode the blocks of the LBRY
blockchain and add the claims information to your database's tables
API
- (post) /api/claim/publish
- 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)
- example:
- (get) /api/claim/resolve/:name/:claimId
- example:
curl https://spee.ch/api/claim/resolve/doitlive/xyz
- example:
- (get) /api/claim/list/:name
- example:
curl https://spee.ch/api/claim/list/doitlive
- example:
- (get) /api/claim/availability/:name
- returns the name if it is available
- example:
curl https://spee.ch/api/claim/availability/doitlive
- (get) /api/channel/availability/:name
- returns the name if it is available
- example:
curl https://spee.ch/api/channel/availability/@CoolChannel
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
- the
server/
folder 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 file.- the
server/routes
folder contains all of the routes for the express app - the
server/models
folder contains all of the models which the app uses to interact with themysql
database. Note: this app uses the sequelize ORM.
- the
client/
folder contains all of the client code
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 of they are part of the spee.ch implementation
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
Below is a list of all possible urls for the content on spee.ch
- controlling, free
LBRY
claim- spee.ch/claim (show)
- spee.ch/claim.ext (serve)
- specific
LBRY
claim- spee.ch/claim_id/claim
- spee.ch/claim_id/claim.ext
- all free contents for the controlling
LBRY
channel- spee.ch/@channel
- a specific
LBRY
channel- spee.ch/@channel:channel_id
- a specific claim within the controlling
LBRY
channel- spee.ch/@channel/claim (show)
- spee.ch/@channel/claim.ext (serve)
- a specific claim within a specific
LBRY
channel- spee.ch/@channel:channel_id/claim
- spee.ch/@channel:channel_id/claim.ext
Bugs
If you find a bug or experience a problem, please report your issue here on github and find us in the lbry discord!