A proof-of-concept web3-based blogging platform with KYC support
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.
- Git
- Python 3.12
- Node.js 18 (& npm)
- MariaDB/MySQL database
-
Install
uv -
Install
make -
Clone the repository
git clone https://github.com/sn1f3rt/ChainTales.git
-
Switch to the project directory
cd ChainTales -
Create a virtual environment
make env
-
Activate the virtual environment
source .venv/bin/activate -
Install Python dependencies
make install
-
Install Ganache CLI
npm i
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_KEYvariable with a 32-bit hexadecimal string. - update the
DB_*variables with your database credentials. - update the
WEB3_PROVIDERvariable with the URL of your Ethereum node.
npm run ganache-devmake devThe app will be running at http://localhost:3000.
npm run ganache-prodmake prodor if you want to enable SSL support
make prod-ssl cert.pem key.pemThe 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.
Copyright © 2025 Sayan "sn1f3rt" Bhattacharyya