witness-profile: A witness profile app

I have announced my personal witness page and already a couple of friends asked if it's open-source or not.

I have generally open-source my stuff but that was not. After a couple of clean-ups and fixes on the source code for the reusability, it's now open source.


See the source at github repository.

What is witness-profile, anyways?

It's a simple Flask (really simple) gives information about the witness' intentions, servers, stats, delegations, community involvements.

It's hard to get this information from a single source from a stake-holder/potential voter standpoint. This app is designed to help with that struggle.

Generic configuration

All the data inside the webpage is stored in JSON, and there is nothing hard coded about my witness on the website. Therefore, the app is in a reusable state. (by other witnesses.)

Installation

$ python3.6 -m venv witness-profile-env
$ source witness-profile-env/bin/activate
$ git clone https://github.com/emre/witness-profile.git      
$ cd witness-profile
$ pip install -r requirements.txt

Configuration

All you need to do is creating a file in your path. (Ex: profile.json)

{
  "witness_account": "emrebeyler",
  "witness_name": "emrebeyler",
  "witness_title": "Developer, STEEM Witness, Creator of dpoll.xyz",
  "witness_description": "I am an experienced software developer in Istanbul/Turkey. \n\nI am passionate about the STEEM blockchain. Supporting the network by maintaining a witness node and developing countless applications/tools around it.",
  "servers": [
    {"name": "Primary", "ram": "64 GB DDR4", "bw": "1 GBit/s", "cpu": "Intel i7-6700 Quad-Core", "hdd": "2x2 TB SATA HDD 7200 RPM "}
  ],
  "projects": [
    {
      "name": "dpoll",
      "description": "dpoll.xyz is an experimental application on the top of the STEEM blockchain. It has an account based voting system, where accounts may vote specific questions asked by other STEEM accounts.",
      "url": "https://dpoll.xyz",
      "github_repo": "https://github.com/emre/dpoll.xyz",
      "logo": "<img class="markdown-img-link" src="https://steemitimages.com/0x0/https://i.postimg.cc/BvW7cZX3/dpoll-logo.png""/>
    },
    {
      "name": "lightsteem",
      "description": "Lightsteem is a light python client to interact with the STEEM blockchain. It’s simple and stupid. It doesn’t interfere the process between the developer and the STEEM node.",
      "github_repo": "https://github.com/emre/lightsteem",
      "logo": "<img class="markdown-img-link" src="https://steemitimages.com/0x0/https://i.postimg.cc/BbM73xSc/lightsteem-logo.png""/>,
      "url": "https://lightsteem.readthedocs.io/en/latest/"
    },
    {
      "name": "steemconnect-python-client",
      "description": "steemconnect-python-client is a simple yet powerful library to interact with the Steemconnect. Steemconnect is a central-single sign on solution for steem based applications.",
      "url": "https://steemconnect-python-client.readthedocs.io/en/latest/",
      "github_repo": "https://github.com/emre/steemconnect-python-client"
    },
    {
      "name": "transmitter",
      "description": "Transmitter is a CLI tool for STEEM blockchain witnesses. It quickly allows you to enable/disable your witness or set some properties for the new witness_set_properties call introduced in Hard Fork 20.",
      "github_repo": "https://github.com/emre/transmitter",
      "logo": "<img class="markdown-img-link" src="https://steemitimages.com/0x0/https://i.postimg.cc/y8NnmgV2/transmitter-logo.png""/>
    },
    {
      "name": "infestor",
      "description": "infestor is a cross platform CLI app to claim and create discounted accounts on the STEEM blockchain.",
      "github_repo": "https://github.com/emre/infestor",
      "logo": "<img class="markdown-img-link" src="https://steemitimages.com/0x0/https://i.postimg.cc/mrBLpsnx/infestor-logo.png""/>
    }
  ],
  "delegations": [
    {
      "account": "dpoll.curation",
      "amount": 2500
    },
    {
      "account": "sndbox",
      "amount": 100
    },
    {
      "account": "steemflagrewards",
      "amount": 100
    },
    {
      "account": "partiko",
      "amount": 100
    },
    {
      "account": "edebiyat",
      "amount": 100
    }
  ],
  "social_ids": {
    "github": "emre",
    "discord": "emrebeyler#9263"
  },
  "community_involvements": [
    {
      "name": "Sndbox",
      "account": "sndbox",
      "website": "https://sndbox.co/",
      "title": "Steward",
      "description": "I help @sndbox as a curator for organized contests. Also maintain the main discord bot handles registration and curation."
    },
    {
      "name": "The Creative Crypto",
      "account": "creativecrypto",
      "website": "https://thecreativecrypto.com",
      "title": "Developer",
      "description": "I develop and maintain an automated voting bot for the creative content in the STEEM blockchain."
    },
    {
      "name": "Utopian",
      "account": "utopian-io",
      "website": "https://utopian.io",
      "title": "Moderator",
      "description": "I review submissions in the development category."
    }
  ]
}

After creating the file, edit config.py in the project and set WITNESS_PROFILE_JSON_FILE" variable with your profile.json file's path.

Running

in the project's directory:

$ gunicorn app:app

This will start listening on port 8000. You can deploy it via nginx and proxy pass your 80.port to 8000.

A hidden API endpoint

/api/v1/witness_profile route returns the all data related to the witness in JSON format. If we agree on a universal format on that and make other witnesses maintain APIs like that, we could have a "witness catalog" frontend :-) (See emrebeyler.me/api/v1/witness_profile for an example.

This is still an idea in progress and not sure we can reach a good participation level.

Roadmap

I will add a new section called Latest witness updates where the recent witness updates posted by the witness will be shown.

If you have any ideas about what kind of information should be there (or not), feel free to post feedback.

H2
H3
H4
3 columns
2 columns
1 column
10 Comments