18983b8d36baff0deea7ed2bd24b6fbeb2042252
🐂 Red Bull Intake Tracker
Track your Red Bull consumption with per-can logging, barcode scanning, spending insights, and an AI-powered coach. Built with React, Appwrite, and Material You theming.
Features
- Quick logging — tap a flavour, pick a size, done. Cans are tracked with timestamp, price, and store
- Barcode scanning — scan any Red Bull can (EAN-13/EAN-8/UPC-A) and it auto-fills flavour, size, and caffeine. 475+ verified barcodes built in, with user overrides
- 20 built-in flavours — Original, Zero, Ruby, Tropical, Dragon Fruit, and more, each with its own accent colour
- AI coach — ChatGPT-style chat interface powered by Ollama, keeps per-session context and gives caffeine/spending advice
- Daily limits — set max cans/day, max spend/day, and a cut-off time. Get warned when you're about to breach
- Charts & analytics — intake over time, flavour breakdown (pie chart), spending trends, caffeine metrics
- Import — bulk import from Excel (.xlsx) or JSON, with duplicate detection and row-level error preview
- Export — download your data as Excel or JSON anytime
- Material You theming — every flavour gets its own dynamic colour palette. Dark mode included
- Onboarding flow — guided setup for new users with limit preferences
- Appwrite auth — email/password + OAuth login, row-level security per user
Tech Stack
| Layer | Tech |
|---|---|
| Frontend | React 18, TypeScript, Vite |
| Styling | Tailwind CSS, Framer Motion |
| Charts | Recharts |
| Backend | Appwrite Cloud (auth, database, storage) |
| AI | Ollama (via server proxy) |
| Barcode | @zxing/browser |
| Import/Export | ExcelJS |
Getting Started
Prerequisites
- Node.js 18+
- An Appwrite Cloud project (free tier works)
Setup
- Clone and install:
git clone https://github.com/nh9961/Red-Bull-Tracker.git
cd Red-Bull-Tracker
npm install
- Copy the environment template:
cp .env.example .env.local
-
Fill in your Appwrite credentials in
.env.local(see Appwrite Setup for full instructions) -
Create the database and collections:
APPWRITE_API_KEY=your-admin-key npm run setup:appwrite
- Start the dev server:
npm run dev
The app runs at http://localhost:5173.
Environment Variables
| Variable | Required | Description |
|---|---|---|
VITE_APPWRITE_ENDPOINT |
Yes | Appwrite endpoint (e.g. https://fra.cloud.appwrite.io/v1) |
VITE_APPWRITE_PROJECT_ID |
Yes | Your Appwrite project ID |
VITE_APPWRITE_DATABASE_ID |
Yes | Database ID (default: redbull_tracker) |
VITE_APPWRITE_COLLECTION_ID |
Yes | Intake entries collection ID |
VITE_APPWRITE_CHAT_COLLECTION_ID |
Yes | Coach chats collection ID |
VITE_APPWRITE_OAUTH_SUCCESS_URL |
No | OAuth redirect URL |
VITE_APPWRITE_OAUTH_FAILURE_URL |
No | OAuth failure redirect URL |
VITE_OLLAMA_PROXY_URL |
No | AI coach proxy endpoint |
OLLAMA_API_KEY |
No | Server-side Ollama API key |
OLLAMA_MODEL |
No | Ollama model for coach (default: deepseek-v4-pro:cloud) |
APPWRITE_API_KEY |
No | Admin key for setup:appwrite script only |
Project Structure
src/
├── App.tsx # Main app shell, routing, layout
├── components/
│ ├── BarcodeScannerModal.tsx # Camera barcode scanner
│ ├── BarcodeProductPreview.tsx
│ ├── CoachPanel.tsx # AI coach chat UI
│ ├── DailyLimitsCard.tsx # Limit status & warnings
│ ├── LimitsSettingsForm.tsx
│ └── OnboardingScreen.tsx
├── data/
│ ├── flavours.ts # 20 built-in flavour definitions
│ ├── themes.ts # Material You theme tokens per flavour
│ ├── barcodes.ts
│ └── verified-barcodes.json # 475+ verified product barcodes
├── lib/
│ ├── appwrite.ts # Appwrite client init
│ ├── appwriteEntries.ts # CRUD for intake entries
│ ├── appwriteBarcodes.ts # Barcode product storage
│ ├── barcodeLookup.ts # Multi-source barcode resolution
│ ├── barcodeScanner.ts # @zxing scanner wrapper
│ ├── userBarcodeMappings.ts # Per-user barcode overrides
│ ├── coachChats.ts # Coach chat persistence
│ ├── useCoachSession.ts # Coach chat hook
│ ├── userLimits.ts # Daily limit logic
│ ├── metrics.ts # Computed stats & charts
│ ├── excel.ts # Excel import/export
│ ├── storage.ts # Local storage helpers
│ ├── themeTokens.ts # Dynamic theme generation
│ └── greeting.ts
└── types.ts # All TypeScript types
Scripts
| Command | Description |
|---|---|
npm run dev |
Start Vite dev server |
npm run build |
Type-check and build for production |
npm run preview |
Preview production build |
npm run lint |
ESLint check |
npm run setup:appwrite |
Create/update Appwrite database resources |
License
MIT
Built by Ned Halksworth
Languages
TypeScript
86.9%
CSS
9.3%
JavaScript
3.6%
HTML
0.2%