Modern Bitcoin tracking dashboard with beautiful interactive charts and real-time data
π¨ Dynamic Charts - colors change based on trend (green for growth, red for decline)
π Interactive Tooltips - detailed information with percentage changes
β‘ Real-time Updates - data updates automatically
π― Trend Indicator - visual price direction indicator
π± Responsive Design - works on all devices
π Fast Animations - smooth transitions and modern UI
- Frontend: Nuxt 4, Vue 3, TypeScript, Tailwind CSS
- Charts: Chart.js + Vue-ChartJS with custom gradients
- Backend: Prisma ORM + PostgreSQL
- API: Binance API for real-time price data
- Styling: Modern dark theme with gradients
# Clone the project
git clone https://github.com/authorless/BitFlow-Dashboard.git
cd BitFlow-Dashboard
# Install exactly the tested dependency tree
npm ci# Copy environment settings
cp .env.example .env
# Edit .env and use your own password
DATABASE_URL="postgresql://bitflow:change-me@localhost:5432/bitcoin_db"
# Apply the existing migrations
npm run prisma:deploy
# Generate Prisma client
npm run prisma:generate# Development mode
npm run dev
# π http://localhost:3000
# Production build
npm run build
npm run startThe project verifies every pull request and publishes a Docker image after a successful push to main using GitHub Actions.
The Docker image is published to DockerHub with the tag:
<your_dockerhub>/bitflow-dashboard:latest
You need to set up the secrets DOCKERHUB_USERNAME and DOCKERHUB_TOKEN in your repository settings.
Workflow file: .github/workflows/docker-image.yml
# Create local settings and change POSTGRES_PASSWORD first
cp .env.example .env
# Start the entire environment with one command
npm run docker:up
# Stop
npm run docker:down
# Rebuild images
npm run docker:buildBitFlow-Dashboard/
βββ components/
β βββ BitcoinChart.vue # Interactive chart with animations
βββ pages/
β βββ index.vue # Main dashboard page
βββ server/
β βββ api/ # REST API endpoints
β β βββ price.ts # Current Bitcoin price
β β βββ historical.ts # Historical data by periods
β β βββ health.ts # Application and database health check
β βββ db/
β β βββ prisma.ts # PostgreSQL connection
β βββ services/
β βββ binance.ts # Binance API integration
β βββ database.ts # Database operations
β βββ historical.ts # Historical data logic
βββ plugins/
β βββ chartjs.client.ts # Chart.js configuration
βββ prisma/
β βββ schema.prisma # Database schema
βββ docker-compose.yml # Docker environment
| Method | Endpoint | Description |
|---|---|---|
GET |
/api/price |
π° Current Bitcoin price |
GET |
/api/historical |
π Historical data by period and timestamp range |
GET |
/api/health |
β€οΈ Application and database readiness |
# Current price
curl http://localhost:3000/api/price
# Historical data (timestamps are milliseconds since Unix epoch)
curl "http://localhost:3000/api/historical?period=day&startDate=1755907200000&endDate=1755993600000"
# Health check
curl http://localhost:3000/api/healthnpm run dev # π Start development
npm run build # π¦ Build for production
npm run start # π― Start production server
npm run typecheck # β
Validate TypeScript and Vue files
npm run prisma:studio # π Open Prisma Studio
npm run prisma:deploy # ποΈ Apply existing migrations
npm run prisma:migrate # ποΈ Create database migration
npm run prisma:generate # β‘ Generate Prisma client- Node.js 24+
- npm 11+
- PostgreSQL 18 recommended
- Docker (recommended)
# Database
DATABASE_URL="postgresql://bitflow:change-me@db:5432/bitcoin_db"
POSTGRES_DB=bitcoin_db
POSTGRES_USER=bitflow
POSTGRES_PASSWORD=change-me
# Market data
BINANCE_API_BASE_URL=https://api.binance.com/api/v3
# Enable only behind a trusted reverse proxy
TRUST_PROXY=false- API inputs are validated and request ranges are limited to 366 days.
- Public market-data routes have per-client rate limits and upstream timeouts.
- Database refreshes are atomic, and cached prices remain available if the provider fails.
- Production responses include security headers; the Docker app runs as an unprivileged, read-only container.
- Major dependency upgrades require manual review, while CI installs, type-checks, and builds every pull request.
PostgreSQL data directories cannot be reused across major versions. Before starting this version over an existing PostgreSQL 16 Docker volume, run:
./scripts/migrate-postgres-18.shThe migration stops the Compose stack, copies the application database into a new PostgreSQL 18 volume, verifies the restored database, and keeps the original PostgreSQL 16 volume as a rollback copy.
- β Dynamic Colors - chart changes color based on trend
- β Modern Gradients - beautiful gradients for chart fills
- β Smooth Animations - fast and responsive transitions (800ms)
- β Enhanced Tooltips - show percentage changes
- β Trend Indicator - visual price direction indicator
- β Responsive Design - looks great on any screen size
- Fork the repository
- Create a feature branch (
git checkout -b feature/amazing-feature) - Commit your changes (
git commit -m 'Add amazing feature') - Push to the branch (
git push origin feature/amazing-feature) - Open a Pull Request
This project is licensed under the GNU AGPL v3. See LICENSE file for details.
Made with β€οΈ for the crypto community