Open-source project for tracking and analyzing Bitcoin treasury holdings across leading companies. Real-time charts and data for corporate Bitcoin adoption and treasury management.
Currently tracking the following Bitcoin treasury companies:
| Company | Curator(s) | Country | Data Source(s) |
|---|---|---|---|
| ๐ฌ๐ง BLGV | @DunderHodl | Canada | Ragnar GSheet, GSheet |
| ๐ฌ๐ฎ Coinsilium/Forza | @DunderHodl | Gibraltar | GSheet |
| ๐ธ๐ช H100 | @DunderHodl | Sweden | https://treasury.h100.group, Ragnar GSheet |
| ๐ฆ๐บ Locate Technologies | @Eh_0z | Australia | GSheet |
| ๐ฏ๐ต Metaplanet | @DunderHodl | Japan | https://metaplanet.strategytracker.com, Ragnar GSheet |
| ๐ซ๐ท SQNS | @american_roci | France | GSheet |
*Want to help curate data for these or other companies? See Contributing.
BTCTCs operates as a dual-component system that automatically generates and displays Bitcoin treasury analytics:
๐ Data Sources โ ๐ Python Analysis โ โ๏ธ S3 Storage โ ๐ Next.js Dashboard
1. Data Collection & Analysis (Python)
- Each company has a dedicated directory in
/companies/(e.g.,companies/h100/,companies/blgv/) - Company-specific Python scripts (
analysis.py,analysis_with_upload.py) run on a regular cadence - Scripts pull data from multiple sources: Google Sheets, APIs, local JSON files, or any data source
- Shared utilities in
/shared_utils/provide common analysis functions (power law regression, chart generation, S3 upload) - Generated charts are automatically uploaded to S3/DigitalOcean Spaces for web display
2. Web Dashboard (Next.js)
- Located in
/website/directory with TypeScript and Tailwind CSS - Dynamic company pages at
/c/[company]route (e.g.,/c/h100,/c/blgv) - Fetches and displays charts from each company's S3 bucket
- Integrates live Google Sheets data with advanced formatting and chart capabilities
- Interactive Chart.js charts generated directly from Google Sheets data with full JSON configuration
- Responsive design with interactive features (chart navigation, data tables, key statistics)
3. Data Source Flexibility
- Google Sheets: Live data extraction with custom processors and formatting
- APIs: Real-time data feeds from company endpoints
- Local Files: Fallback JSON data for offline analysis
- Mixed Sources: Companies can combine multiple data sources as needed
btctcs/
โโโ companies/ # Company-specific analysis scripts
โ โโโ h100/
โ โ โโโ analysis.py # Generate charts locally
โ โ โโโ analysis_with_upload.py # Generate + upload to S3
โ โ โโโ config.py # Company configuration & data processing
โ โ โโโ fallback_data.json # Backup data source
โ โโโ blgv/
โ โโโ lqwd/
โ โโโ metaplanet/
โโโ shared_utils/ # Common analysis utilities
โ โโโ bitcoin_analysis.py # Chart generation & statistical analysis
โ โโโ s3_uploader.py # S3/DigitalOcean Spaces integration
โ โโโ google_sheets.py # Google Sheets API integration
โ โโโ upload_handler.py # Unified upload management
โโโ website/ # Next.js web dashboard
โ โโโ src/
โ โ โโโ app/c/[company]/ # Dynamic company pages
โ โ โโโ components/ # Reusable UI components
โ โ โโโ config/ # Company configurations & types
โ โ โโโ services/ # API integrations
โ โโโ ...
โโโ requirements.txt # Python dependencies
- Scheduled Execution: Python scripts run automatically (via cron, GitHub Actions, etc.)
- Data Processing: Scripts fetch latest data and generate updated charts
- Cloud Upload: Charts are uploaded to S3 with company-specific prefixes
- Web Display: Next.js dashboard automatically displays the latest charts
- Live Integration: Google Sheets data is fetched in real-time by the web dashboard
๐ Adding a new company is as simple as updating a single config.py file!
The project has been scaffolded to make volunteer contributions incredibly easy:
- Minimal Setup: Each company needs a
config.pyfile (data loading and chart configuration) andanalysis_with_upload.pyfile (automation entry point) - Web Dashboard Integration: Add company configuration to
website/src/config/companies.tsfor dashboard display - Instant Global Sharing: Once configured, charts are automatically generated and shared worldwide via the web dashboard
- No Infrastructure Knowledge Required: Volunteers only need to understand the company's data - the framework can handle most everything else
- Template-Based: Copy an existing company's directory and modify for your target company
- Flexible Data Sources: Use whatever data source works best (Google Sheets, APIs, CSV files, etc.)
- Automated CI/CD: GitHub Actions automatically discovers and runs any company with an
analysis_with_upload.pyfile
Example: To add GameStop's Bitcoin holdings, a volunteer would:
- Copy
/companies/h100/to/companies/gamestop/ - Update
config.pywith GameStop's data source (e.g., point to a public Google Sheet with GameStop's treasury data) - Customize chart settings (colors, date ranges, etc.) / create custom charts
- Add GameStop configuration to
website/src/config/companies.ts(company name, emoji, curator info, etc.) - The
analysis_with_upload.pyfile works automatically (no changes needed) - GameStop's analytics are now live at
btctcs.com/c/gamestopand update automatically ๐
- Multi-Source Data: Supports Google Sheets, APIs, JSON files, and custom data sources
- Automated Charts: Power law analysis, NAV multiples, time series, and custom visualizations
- Real-Time Dashboard: Live data integration with interactive charts and tables
- Scalable Architecture: Easy to add new companies with minimal configuration
- Volunteer-Driven Growth: Community can scale the project by adopting individual companies
- Flexible Deployment: Python scripts can run anywhere, web dashboard deploys to Vercel
The Python analysis tools generate charts and metrics for Bitcoin treasury companies.
- Python 3.8+
- pip
# Clone the repository
git clone https://github.com/DundieWinner/btctcs.git
cd btctcs
# Install Python dependencies
pip install -r requirements.txt
# Run analysis for a specific company (from root directory)
python3 companies/h100/analysis.py
# Or run with data upload to S3 (requires AWS credentials)
python3 companies/h100/analysis_with_upload.py# Create virtual environment
python3 -m venv data_analysis_env
source data_analysis_env/bin/activate # On Windows: data_analysis_env\Scripts\activate
# Install dependencies
pip install -r requirements.txt
# Run analysis (from root directory)
python3 companies/h100/analysis.py# For live API data instead of local JSON
export DATA_URL="https://treasury.h100.group/companyData?ticker=H100"
# For S3 chart uploads
export S3_BUCKET_NAME="your-bucket-name"
export AWS_ACCESS_KEY_ID="your-access-key"
export AWS_SECRET_ACCESS_KEY="your-secret-key"
export AWS_REGION="us-east-1"The website displays the charts and provides company dashboards.
- Node.js 18+
- npm or yarn
# Navigate to website directory
cd website
# Install dependencies
npm install
# or
yarn install
# Set up environment variables
cp .env.example .env.local
# Edit .env.local with your configuration
# Run development server
npm run dev
# or
yarn dev
# Open http://localhost:3000 in your browsercd website
# Build the application
npm run build
# or
yarn build
# Start production server
npm start
# or
yarn startCreate a .env.local file in the website directory:
# Google Sheets API (for data fetching)
GOOGLE_SHEETS_API_KEY=your_google_sheets_api_key
# AWS S3 (for chart images)
S3_ACCESS_KEY=your_s3_access_key
S3_SECRET=your_s3_secret_key
S3_BUCKET_NAME=your_bucket_name
S3_REGION=us-east-1
# Base URL for the site
NEXT_PUBLIC_BASE_URL=http://localhost:3000MIT License - see LICENSE file for details.
- Creator: @DunderHodl
- Website: btctcs.com
- GitHub: github.com/DundieWinner/btctcs