Skip to content

A modern, customizable personal dashboard built with SvelteKit, featuring real-time widgets for weather, transportation, news, cryptocurrency, and more.

Notifications You must be signed in to change notification settings

cryptomothy/home-dashboard

Repository files navigation

Home Dashboard

A modern, customizable personal dashboard built with SvelteKit, featuring real-time widgets for weather, transportation, news, cryptocurrency, and more.

SvelteKit TypeScript TailwindCSS

πŸ“Έ Screenshot

Dashboard Screenshot

The dashboard in action on a tablet, showing weather, todo list, bike availability, and transit schedules.

πŸ“± About

This dashboard is specifically designed to run on a home tablet (such as an iPad or Android tablet), providing an always-on information center for your household. The UI is optimized for tablet screens and includes features like real-time updates, an always-visible clock, and configurable widgets.

⚠️ Important Note: Several widgets are specifically designed for Quebec, Canada and will only work in this region:

  • 🚴 Bike Widget: Uses BIXI (Montreal's bike-sharing system)
  • 🚌 Bus Widget: Integrates with RTC (RΓ©seau de transport de la Capitale - Quebec City transit)
  • 🎯 Bonjour Quebec Widget: Aggregates Quebec-specific content

If you're outside Quebec, you can disable these widgets and use the other universal widgets (Weather, News, Crypto, Hacker News, Todo, Map).

✨ Features

Available Widgets

🌍 Universal Widgets (Work Anywhere)

  • 🌀️ Weather Widget - Real-time weather information and forecasts
  • πŸ“ Todo Widget - Task management with local storage persistence
  • πŸ—ΊοΈ Map Widget - Interactive map with multiple style options
  • πŸ’° Crypto Widget - Cryptocurrency prices and trends
  • πŸ“° News Widget - Latest news headlines
  • πŸ’» Hacker News Widget - Top stories from Hacker News

🍁 Quebec-Specific Widgets

  • 🚴 Bike Widget - Real-time bike-sharing availability (BIXI - Montreal)
  • 🚌 Bus Widget - Public transit schedules and arrivals (RTC - Quebec City)
  • 🎯 Bonjour Quebec Widget - Quebec-specific content aggregator

Core Features

  • πŸ”’ IP-based Access Control - Secure your dashboard with IP restrictions
  • βš™οΈ Widget Management - Toggle widgets on/off via settings modal
  • 🎨 Modern UI - Beautiful gradient effects and smooth animations
  • πŸ“± Responsive Design - Works seamlessly across devices
  • ⏰ Real-time Clock - Always-visible time and date display
  • 🎯 Grid Layout - Flexible 8-column responsive grid system

πŸš€ Getting Started

Prerequisites

  • Node.js 18+
  • pnpm (recommended) or npm

Installation

  1. Clone the repository:
git clone https://github.com/yourusername/home-dashboard.git
cd home-dashboard
  1. Install dependencies:
pnpm install
  1. Set up environment variables:
cp env.example .env

Edit .env and configure your API keys and settings.

  1. Start the development server:
pnpm dev

The app will be available at http://localhost:5173

πŸ“± Tablet Setup (Recommended Usage)

This dashboard is designed to run continuously on a tablet at home. Here are some setup recommendations:

For iPad/iOS:

  1. Open the dashboard in Chrome
  2. Add to Home Screen for full-screen experience
  3. Enable "Guided Access" to prevent accidental navigation away
  4. Disable auto-lock in Settings > Display & Brightness > Auto-Lock

For Android Tablets:

  1. Open the dashboard in Chrome
  2. Add to Home Screen for full-screen experience
  3. Use "Kiosk Mode" apps to lock the tablet to the dashboard
  4. Adjust screen timeout settings to keep display on

Network Configuration:

  • Connect your tablet to your home WiFi
  • Configure the LOCAL_IP and ALLOWED_IP_* variables in .env to include your home network IPs
  • The dashboard includes IP-based access control for security

Power Management:

  • Keep the tablet plugged in continuously
  • Consider using a tablet stand or wall mount
  • Adjust screen brightness for comfortable 24/7 viewing

πŸ› οΈ Development

Available Scripts

# Start development server
pnpm dev

# Build for production
pnpm build

# Preview production build
pnpm preview

# Type checking
pnpm check

# Type checking (watch mode)
pnpm check:watch

Project Structure

src/
β”œβ”€β”€ lib/
β”‚   β”œβ”€β”€ components/
β”‚   β”‚   β”œβ”€β”€ dashboard/          # Widget components
β”‚   β”‚   β”œβ”€β”€ ui/                 # shadcn-svelte UI components
β”‚   β”‚   └── WidgetSettingsModal.svelte
β”‚   β”œβ”€β”€ services/               # API services for data fetching
β”‚   β”œβ”€β”€ config/                 # Configuration files
β”‚   β”œβ”€β”€ types/                  # TypeScript type definitions
β”‚   └── utils.ts               # Utility functions
β”œβ”€β”€ routes/
β”‚   β”œβ”€β”€ +page.svelte           # Main dashboard page
β”‚   β”œβ”€β”€ +layout.svelte         # Root layout
β”‚   └── api/                   # API routes
└── app.html                   # HTML template

🎨 Customization

Adapting for Your Region

If you're outside Quebec, you can easily adapt the dashboard:

  1. Disable Quebec-specific widgets in the settings modal (βš™οΈ icon)
  2. Replace transit widgets: Modify src/lib/services/bikeService.ts and src/lib/services/rtcService.ts to use your local transit APIs
  3. Adjust location settings: Update PUBLIC_DEFAULT_LAT and PUBLIC_DEFAULT_LON in .env for your location
  4. Customize content sources: Update API endpoints in the service files to match your preferred data sources

Adding New Widgets

  1. Create a new widget component in src/lib/components/dashboard/
  2. Create a corresponding service in src/lib/services/ if needed
  3. Register the widget in src/routes/+page.svelte:
let availableWidgets = [
  // ... existing widgets
  {
    name: 'myWidget',
    active: false,
    component: MyWidget,
  },
];

Styling

The dashboard uses TailwindCSS with a custom dark theme featuring:

  • Gradient effects (cyan, purple, green, orange)
  • Glassmorphism effects
  • Smooth animations and transitions

Modify tailwind.config.js to customize the theme.

πŸ” Security

The dashboard includes IP-based access control. Configure allowed IPs in your environment variables or through the ipRestrictionService.

πŸ—οΈ Tech Stack

πŸ“¦ Deployment

Build the production version:

pnpm build

The built app will be in the build/ directory. Deploy it to your preferred hosting platform:

  • Vercel
  • Netlify
  • Cloudflare Pages
  • Your own server

Note: You may need to install an appropriate SvelteKit adapter for your target platform.

🀝 Contributing

Contributions are welcome! Please feel free to submit a Pull Request.

πŸ™ Acknowledgments

  • Weather data provided by appropriate weather APIs
  • Transit data from RTC (RΓ©seau de transport de la Capitale)
  • Bike-sharing data from BIXI
  • Built with amazing open-source tools and libraries

About

A modern, customizable personal dashboard built with SvelteKit, featuring real-time widgets for weather, transportation, news, cryptocurrency, and more.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published