{"id":26873637,"url":"https://github.com/sn1f3rt/chaintales","last_synced_at":"2026-04-30T00:06:58.886Z","repository":{"id":285274051,"uuid":"957581856","full_name":"sn1f3rt/ChainTales","owner":"sn1f3rt","description":"A proof-of-concept web3-based blogging platform with KYC support","archived":false,"fork":false,"pushed_at":"2025-03-30T18:11:48.000Z","size":1194,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-03-30T19:19:43.070Z","etag":null,"topics":["blockchain","blog","flask","kyc","python","siwe-auth","web3"],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/sn1f3rt.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":".github/FUNDING.yml","license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null},"funding":{"buy_me_a_coffee":"sn1f3rt","github":["sn1f3rt"],"patreon":"sn1f3rt"}},"created_at":"2025-03-30T18:04:34.000Z","updated_at":"2025-03-30T18:11:52.000Z","dependencies_parsed_at":"2025-03-30T19:19:54.023Z","dependency_job_id":"89aae66d-4021-4d0a-b978-90cb5ecec710","html_url":"https://github.com/sn1f3rt/ChainTales","commit_stats":null,"previous_names":["sn1f3rt/chaintales"],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sn1f3rt%2FChainTales","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sn1f3rt%2FChainTales/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sn1f3rt%2FChainTales/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sn1f3rt%2FChainTales/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/sn1f3rt","download_url":"https://codeload.github.com/sn1f3rt/ChainTales/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":246443534,"owners_count":20778252,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["blockchain","blog","flask","kyc","python","siwe-auth","web3"],"created_at":"2025-03-31T09:19:43.460Z","updated_at":"2026-04-30T00:06:58.881Z","avatar_url":"https://github.com/sn1f3rt.png","language":"Python","funding_links":["https://buymeacoffee.com/sn1f3rt","https://github.com/sponsors/sn1f3rt","https://patreon.com/sn1f3rt"],"categories":[],"sub_categories":[],"readme":"# ChainTales\n\n[![ci/gh-actions/lint](https://github.com/sn1f3rt/ChainTales/actions/workflows/lint.yml/badge.svg)](https://github.com/sn1f3rt/ChainTales/actions/workflows/lint.yml)\n[![ci/gh-actions/format](https://github.com/sn1f3rt/ChainTales/actions/workflows/format.yml/badge.svg)](https://github.com/sn1f3rt/ChainTales/actions/workflows/format.yml)\n\n\u003e A proof-of-concept web3-based blogging platform with KYC support\n\n## Table of Contents\n\n- [About](#about)\n- [Prerequisites](#prerequisites)\n- [Installation](#installation)\n- [Configuration](#configuration)\n- [Running](#running)\n  - [Development](#development)\n  - [Production](#production)\n- [License](#license)\n\n## About\n\nChainTales 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.\n\nUsers 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.\n\nChainTales integrates:\n- 🔐 **KYC-Gated Access** – Posts and tipping are restricted to verified users only.\n- 🧾 **Context-Sensitive Privacy** – Share only the identity details needed for each interaction.\n- 📝 **Immutable Blog Posts** – Content is stored and tracked through blockchain-backed systems.\n- 💸 **Crypto Tipping** – Reward creators with Ethereum-based microtransactions.\n- ⚙️ **Modern Tech Stack** – Flask, SQLAlchemy, Web3.py, and Ganache for seamless DApp development.\n\nThis project builds on the capabilities of two foundational systems:\n- [**BlogChain**](https://github.com/sn1f3rt/BlogChain) – A decentralized blogging application with Ethereum login and tipping.\n- [**IDenSafe**](https://github.com/sn1f3rt/IDenSafe) – A blockchain-based digital identity platform with selective KYC.\n\nChainTales aims to redefine decentralized content platforms by merging anonymity, accountability, and incentive — all while giving users full control over their identity and data.\n\n## Prerequisites\n\n- Git\n- Python 3.12\n- Node.js 18 (\u0026 npm)\n- MariaDB/MySQL database\n\n## Installation\n\n1. Install [`uv`](https://docs.astral.sh/uv/)\n\n2. Install [`make`](https://www.gnu.org/software/make/)\n\n3. Clone the repository\n\n   ```shell\n    git clone https://github.com/sn1f3rt/ChainTales.git\n   ```\n   \n4. Switch to the project directory\n\n   ```shell\n    cd ChainTales\n   ```\n   \n5. Create a virtual environment\n\n   ```shell\n   make env\n   ```\n   \n6. Activate the virtual environment\n\n   ```shell\n   source .venv/bin/activate\n   ```\n   \n7. Install Python dependencies\n\n   ```shell\n   make install\n   ```\n   \n8. Install [Ganache](https://archive.trufflesuite.com/ganache/) CLI\n\n   ```shell\n    npm i\n    ```\n\n## Configuration\n\nCreate a file named `config.yaml` in the root directory with the following structure:\n\n```yaml\napp:\n  secret_key: \"n_bytes_hex_string\"\n  testing: true # set to false for production\n\ndb:\n  host: \"localhost\"\n  port: 3306\n  user: \"sn1f3rt\"\n  password: \"password\"\n  name: \"chaintales\"\n\nweb3:\n  provider: \"http://localhost:7545\" # Ganache default\n\nrecaptcha:\n  site_key: \"your_recaptcha_site_key\"\n  secret_key: \"your_recaptcha_secret_key\"\n\n```\n\n- update the `SECRET_KEY` variable with a 32-bit hexadecimal string.\n- update the `DB_*` variables with your database credentials.\n- update the `WEB3_PROVIDER` variable with the URL of your Ethereum node.\n\n## Running\n\n### Development\n\n#### Run Ganache CLI\n\n```shell\nnpm run ganache-dev\n```\n\n#### Run the web app\n\n```shell\nmake dev\n```\n\nThe app will be running at `http://localhost:3000`.\n\n### Production\n\n#### Run Ganache CLI\n\n```shell\nnpm run ganache-prod\n```\n\n#### Run the web app\n\n```shell\nmake prod\n```\n\nor if you want to enable SSL support\n\n```shell\nmake prod-ssl cert.pem key.pem\n```\n\nThe app will be running at `http(s)://\u003cYOUR-SERVER_IP\u003e\u003e:13139`. The certificate and key files are required for SSL support, and should be placed in the `src/apps/backend` directory.\n\n## License\n\n[![License](https://img.shields.io/github/license/sn1f3rt/ChainTales)](LICENSE)\n\nCopyright \u0026copy; 2025 [Sayan \"sn1f3rt\" Bhattacharyya](https://sn1f3rt.dev)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsn1f3rt%2Fchaintales","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fsn1f3rt%2Fchaintales","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsn1f3rt%2Fchaintales/lists"}