https://github.com/sn1f3rt/chaintales
A proof-of-concept web3-based blogging platform with KYC support
https://github.com/sn1f3rt/chaintales
blockchain blog flask kyc python siwe-auth web3
Last synced: 2 months ago
JSON representation
A proof-of-concept web3-based blogging platform with KYC support
- Host: GitHub
- URL: https://github.com/sn1f3rt/chaintales
- Owner: sn1f3rt
- License: gpl-3.0
- Created: 2025-03-30T18:04:34.000Z (over 1 year ago)
- Default Branch: main
- Last Pushed: 2025-03-30T18:11:48.000Z (over 1 year ago)
- Last Synced: 2025-03-30T19:19:43.070Z (over 1 year ago)
- Topics: blockchain, blog, flask, kyc, python, siwe-auth, web3
- Language: Python
- Homepage:
- Size: 1.14 MB
- Stars: 0
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- Funding: .github/FUNDING.yml
- License: LICENSE
Awesome Lists containing this project
README
# ChainTales
[](https://github.com/sn1f3rt/ChainTales/actions/workflows/lint.yml)
[](https://github.com/sn1f3rt/ChainTales/actions/workflows/format.yml)
> A proof-of-concept web3-based blogging platform with KYC support
## Table of Contents
- [About](#about)
- [Prerequisites](#prerequisites)
- [Installation](#installation)
- [Configuration](#configuration)
- [Running](#running)
- [Development](#development)
- [Production](#production)
- [License](#license)
## 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**](https://github.com/sn1f3rt/BlogChain) โ A decentralized blogging application with Ethereum login and tipping.
- [**IDenSafe**](https://github.com/sn1f3rt/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`](https://docs.astral.sh/uv/)
2. Install [`make`](https://www.gnu.org/software/make/)
3. Clone the repository
```shell
git clone https://github.com/sn1f3rt/ChainTales.git
```
4. Switch to the project directory
```shell
cd ChainTales
```
5. Create a virtual environment
```shell
make env
```
6. Activate the virtual environment
```shell
source .venv/bin/activate
```
7. Install Python dependencies
```shell
make install
```
8. Install [Ganache](https://archive.trufflesuite.com/ganache/) CLI
```shell
npm i
```
## Configuration
Create a file named `config.yaml` in the root directory with the following structure:
```yaml
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
```shell
npm run ganache-dev
```
#### Run the web app
```shell
make dev
```
The app will be running at `http://localhost:3000`.
### Production
#### Run Ganache CLI
```shell
npm run ganache-prod
```
#### Run the web app
```shell
make prod
```
or if you want to enable SSL support
```shell
make prod-ssl cert.pem key.pem
```
The app will be running at `http(s)://>: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](https://sn1f3rt.dev)