π BazingaD
A modern, customizable browser start page with category-based organization, service monitoring, weather, traffic information, and an admin interface.
β¨ Features
- π¨ 20 Beautiful Themes - Choose from Midnight Dark, Ocean Blue, Forest Green, Cyberpunk, Dracula, Nord, and more
- π Categorized Blocks - Organize your links by category
- π€ Alphabetical Sorting - Blocks automatically sorted within each category
- πΌοΈ Custom Icons - Support for custom images or auto-fetched favicons
- π Service Monitoring - Monitor the health of your self-hosted services
- π€οΈ Weather Display - Show current weather with location search
- π Traffic Information - Real-time commute times with color-coded status
- βοΈ General Settings - Customize site title, favicon, and theme
- π Security - 2FA/TOTP support, session management, rate limiting
- β‘ Admin Interface - Web UI to manage all settings
- π³ Docker Ready - Easy deployment with Docker Compose
- β¨οΈ Keyboard Shortcuts - Ctrl+K to focus search
- π± Responsive - Works on all devices
π Quick Start
Using Docker Compose (Recommended)
The easiest way to run BazingaD is using the pre-built Docker image from Docker Hub.
- Create a
docker-compose.ymlfile:
version: '3.8'
services:
startpage:
image: twlatx/bazingad:latest
container_name: bazingad
ports:
- "3000:3000"
environment:
- NODE_ENV=production
- DATABASE_URL=file:/app/data/prod.db
- NEXT_PUBLIC_APP_NAME=BazingaD
volumes:
- ./data:/app/data
restart: unless-stopped
healthcheck:
test: ["CMD", "wget", "--no-verbose", "--tries=1", "--spider", "http://localhost:3000/api/health"]
interval: 30s
timeout: 10s
retries: 3
start_period: 40s
- Start the application:
docker-compose up -d
Open http://localhost:3000 in your browser
Access the admin panel at http://localhost:3000/admin
Building from Source
If you prefer to build the Docker image yourself:
- Clone the repository:
git clone https://github.com/tunwinlat/BazingaD.git
cd BazingaD
- Build and start the application:
docker-compose up -d --build
Development
- Install dependencies:
npm install
- Set up the database:
npx prisma migrate dev
npx prisma db seed
- Run the development server:
npm run dev
π Project Structure
BazingaD/
βββ src/
β βββ app/ # Next.js app router
β β βββ api/ # API routes
β β βββ admin/ # Admin interface
β β βββ globals.css # Global styles
β β βββ layout.tsx # Root layout
β β βββ page.tsx # Main dashboard
β βββ components/ # React components
β βββ lib/ # Utility functions
β βββ types/ # TypeScript types
βββ prisma/
β βββ schema.prisma # Database schema
β βββ seed.ts # Seed data
βββ docker-compose.yml # Docker Compose config
βββ Dockerfile # Docker image
βββ README.md # This file
π§ Configuration
Adding Blocks
Visit /admin to manage blocks and categories through the web interface.
Service Monitoring
When adding a block, you can enable monitoring by:
- Checking "Is Monitored"
- Providing a health check URL
- The dashboard will show a status indicator
Weather Integration
- Go to Admin β Integrations tab
- Enable Weather Display
- Search for your location or enter coordinates manually
- Choose metric or imperial units
Traffic Information
- Go to Admin β Traffic tab
- Enable Traffic Display
- Enter your Google Routes API key
- Set your Home and Work addresses
- Select your preferred travel mode (Drive, Transit, Bicycle, Walk, Two Wheeler)
- Choose metric or imperial units
Note: Google Routes API includes a free tier of 10,000 requests per month. The app caches results for 30 minutes and only fetches when the tab is active to minimize API usage.
Custom Icons
You can provide custom icon URLs when creating blocks. If no icon is provided, the dashboard will automatically fetch the website's favicon.
General Settings
Customize your dashboard appearance:
- Site Title - Change the browser tab title
- Favicon - Upload a custom favicon (SVG format supported)
- Theme - Choose from 20 beautiful color themes:
- Midnight Dark (default)
- Ocean Blue
- Forest Green
- Sunset Orange
- Sakura Pink
- Cyberpunk
- Monokai
- Dracula
- Nord
- Solarized Dark
- Gruvbox Dark
- Tokyo Night
- One Dark
- Catppuccin Mocha
- RosΓ© Pine
- Material Dark
- High Contrast
- Coffee
- Lavender
- Crimson
π Security Features
- Two-Factor Authentication (2FA) - TOTP-based 2FA support
- Session Management - View and revoke active sessions
- Rate Limiting - Protection against brute force attacks
- Security Headers - X-Frame-Options, CSP, HSTS, and more
- Dashboard Protection - Optional password protection for the dashboard
Resetting a Forgotten Admin Password
If you forget your admin password, you can reset it via the command line. This requires direct access to the server running the application.
Local Development:
DATABASE_URL=file:./data/dev.db npm run admin:reset-password
Docker:
docker exec -it bazingad node scripts/reset-admin-password.js
The script will list available users, prompt for a new password (with hidden input), and invalidate all existing sessions. You can also pass --clear-totp to disable 2FA if you've lost access to your authenticator app:
docker exec -it bazingad node scripts/reset-admin-password.js --clear-totp
π API Endpoints
Categories & Blocks
GET /api/categories- List all categories with blocksPOST /api/categories- Create a new categoryPUT /api/categories/:id- Update a categoryDELETE /api/categories/:id- Delete a categoryGET /api/blocks- List all blocksPOST /api/blocks- Create a new blockPUT /api/blocks/:id- Update a blockDELETE /api/blocks/:id- Delete a block
Settings
GET /api/settings- Get general settingsPUT /api/settings- Update settingsGET /api/settings/general- Get site title and faviconPUT /api/settings/general- Update site title and faviconGET /api/settings/traffic- Get traffic settingsPUT /api/settings/traffic- Update traffic settings
Data
GET /api/weather- Get current weatherGET /api/traffic- Get traffic information (with caching)GET /api/health/:id- Check service health
π³ Docker Deployment
Using Pre-built Image (Recommended)
Pull and run the official image from Docker Hub:
# Pull the latest image
docker pull twlatx/bazingad:latest
# Run with docker run
docker run -d \
--name bazingad \
-p 3000:3000 \
-v ./data:/app/data \
-e NODE_ENV=production \
-e NEXT_PUBLIC_APP_NAME="BazingaD" \
--restart unless-stopped \
twlatx/bazingad:latest
Building from Source
docker-compose up -d --build
View logs:
docker-compose logs -f
Stop:
docker-compose down
Data persistence:
The SQLite database is stored in ./data/prod.db and persisted through Docker volumes.
π οΈ Tech Stack
- Next.js 15 - React framework
- TypeScript - Type safety
- Tailwind CSS - Styling
- Prisma - Database ORM
- SQLite - Database
- Lucide React - Icons
- bcrypt - Password hashing
- rate-limiter-flexible - Rate limiting
π License
MIT License - feel free to use this project for personal or commercial purposes.