An image hosting service on top of the LBRY protocol.
client | ||
config | ||
devConfig | ||
FAQ | ||
public | ||
server | ||
test | ||
.eslintignore | ||
.eslintrc | ||
.gitignore | ||
.sequelizerc | ||
LICENSE | ||
package-lock.json | ||
package.json | ||
README.md | ||
webpack.client.common.js | ||
webpack.config.js | ||
webpack.dev.client.js | ||
webpack.dev.js | ||
webpack.dev.server.js | ||
webpack.prod.js | ||
webpack.server.common.js |
Spee.ch
Spee.ch is a web app that reads and publishes images and videos to and from the LBRY blockchain.
##Installation
- start mysql
- install mysql
- create a database called
lbry
- save your connection
username
andpassword
someplace handy
- start lbrynet daemon
- install the
lbry
daemon - start the
lbry
daemon
- install the
- start spee.ch
- clone this repo
- run
npm install
- create your own config files in
/config
- copy
mysqlConfig.js.example
, name itmysqlConfig.js
, and update its contents. - copy
siteConfig.js.example
, name itsiteConfig.js
, and update its contents.
- copy
- build the app by running
npm run build
- for development,
npm run build-dev
will build the app and continue to listen for changes, building again when a change is made.
- for development,
- to start the server, run
npm run start
- for development,
npm run start-dev
will start the server and continue to listen for changes, restarting the server again whenever a change is made. - for production, pm2 is a great tool for starting and managing node processes
- for development,
- visit localhost:3000 and check out your spee.ch app!
- start spee.ch-sync (optional, recommended)
- Note: this tool will decode blocks from the
lbry
blockchain and update the Claim and Certificate tables in mysql with all the claims from the blockchain. This is not necessary if you only want to host and resolve content published through your version of spee.ch, but it is required if you want to retrieve and host other content from the lbry network. - install and run this
speech-sync
tool
- Note: this tool will decode blocks from the
Development & App Structure
- the
client/
folder houses all of thereact
andredux
code.client.js
is the entry point for the app. This file is the entry point for webpack to build the client bundle.app.jsx
is the parent component that houses the rest of the app components- components are located in
client/components
,client/containers
, andclient/pages
/components
contains the 'dumb' components that receive props (if any) from their parents/containers
contains the 'smart' redux-connected components that receive props from theredux-store
/pages
contains the components which act as the main pages of the app
- actions are located in the
client/actions
folder - reducers are located in the
client/reducers
folder - sagas are located in the
client/sagas
folder
- the
server/
folder contains all of server code.server.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. This file is the entry point for webpack to build the server bundle.- the
/routes
folder contains all of the routes for the express app - the
/models
folder contains all of the models which the app uses to interact with themysql
database. Note: this app uses the sequelize orm.
- webpack
- During the build process, webpack creates two bundles for this project:
- (1) a client-side app bundle which will be located at
public/bundle/bundle.js
- (2) a server bundle which will be located at
server/index.js
- (1) a client-side app bundle which will be located at
- During the build process, webpack creates two bundles for this project:
- configuration
- the
config/
folder contains all of the required config files. The project contains.example
files which can be copied to create the necessary.js
files - the
devConfig/
folder contains optional config files. Updating these files is not necessary. If you update these files, make sure to add them to your.gitignore
file so they are not included in source control.
- the
Tests
- Spee.ch uses
mocha
withchai
for testing. - To run all tests that do not require LBC, run
npm test -- --grep @usesLbc --invert
- To run all tests, including those that require LBC (like publishing), simply run
npm test
API
GET
- /api/claim/resolve/:name/:claimId
- example:
curl https://spee.ch/api/claim/resolve/doitlive/xyz
- example:
- /api/claim/list/:name
- example:
curl https://spee.ch/api/claim/list/doitlive
- example:
- /api/claim/availability/:name
- returns the name if it is available
- example:
curl https://spee.ch/api/claim/availability/doitlive
- /api/channel/availability/:name
- returns the name if it is available
- example:
curl https://spee.ch/api/channel/availability/@CoolChannel
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
(optional)channelPassword
(optional,; required ifchannelName
is provided)
- example:
Bugs
If you find a bug or experience a problem, please report your issue here on github and find us in the lbry discord!