Skip to content

A proof-of-concept web3-based blogging platform with KYC support

License

Notifications You must be signed in to change notification settings

sn1f3rt/ChainTales

Repository files navigation

ChainTales

ci/gh-actions/lint ci/gh-actions/format

A proof-of-concept web3-based blogging platform with KYC support

Table of Contents

About

ChainTales is a next-generation decentralized blogging platform that combines content freedom with responsible identity. It ensures that only users who have completed KYC verification can publish posts or send cryptocurrency tips, creating a trust-enhanced environment for meaningful, authentic interactions.

Users authenticate via Sign-In with Ethereum (SIWE), using their Ethereum wallets instead of traditional usernames and passwords. The identity verification process is handled through a KYC module with context-sensitive privacy controls, allowing users to choose which identity attributes to disclose. Once verified, users can publish blogs, interact with others, and tip creators — all within a transparent, blockchain-powered ecosystem.

ChainTales integrates:

  • 🔐 KYC-Gated Access – Posts and tipping are restricted to verified users only.
  • 🧾 Context-Sensitive Privacy – Share only the identity details needed for each interaction.
  • 📝 Immutable Blog Posts – Content is stored and tracked through blockchain-backed systems.
  • 💸 Crypto Tipping – Reward creators with Ethereum-based microtransactions.
  • ⚙️ Modern Tech Stack – Flask, SQLAlchemy, Web3.py, and Ganache for seamless DApp development.

This project builds on the capabilities of two foundational systems:

  • BlogChain – A decentralized blogging application with Ethereum login and tipping.
  • IDenSafe – A blockchain-based digital identity platform with selective KYC.

ChainTales aims to redefine decentralized content platforms by merging anonymity, accountability, and incentive — all while giving users full control over their identity and data.

Prerequisites

  • Git
  • Python 3.12
  • Node.js 18 (& npm)
  • MariaDB/MySQL database

Installation

  1. Install uv

  2. Install make

  3. Clone the repository

     git clone https://github.com/sn1f3rt/ChainTales.git
  4. Switch to the project directory

     cd ChainTales
  5. Create a virtual environment

    make env
  6. Activate the virtual environment

    source .venv/bin/activate
  7. Install Python dependencies

    make install
  8. Install Ganache CLI

     npm i

Configuration

Create a file named config.yaml in the root directory with the following structure:

app:
  secret_key: "n_bytes_hex_string"
  testing: true # set to false for production

db:
  host: "localhost"
  port: 3306
  user: "sn1f3rt"
  password: "password"
  name: "chaintales"

web3:
  provider: "http://localhost:7545" # Ganache default

recaptcha:
  site_key: "your_recaptcha_site_key"
  secret_key: "your_recaptcha_secret_key"
  • update the SECRET_KEY variable with a 32-bit hexadecimal string.
  • update the DB_* variables with your database credentials.
  • update the WEB3_PROVIDER variable with the URL of your Ethereum node.

Running

Development

Run Ganache CLI

npm run ganache-dev

Run the web app

make dev

The app will be running at http://localhost:3000.

Production

Run Ganache CLI

npm run ganache-prod

Run the web app

make prod

or if you want to enable SSL support

make prod-ssl cert.pem key.pem

The app will be running at http(s)://<YOUR-SERVER_IP>>:13139. The certificate and key files are required for SSL support, and should be placed in the src/apps/backend directory.

License

License

Copyright © 2025 Sayan "sn1f3rt" Bhattacharyya

About

A proof-of-concept web3-based blogging platform with KYC support

Topics

Resources

License

Stars

Watchers

Forks

Sponsor this project

  •