A modern, customizable personal dashboard built with SvelteKit, featuring real-time widgets for weather, transportation, news, cryptocurrency, and more.
The dashboard in action on a tablet, showing weather, todo list, bike availability, and transit schedules.
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).
- π€οΈ 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
- π΄ 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
- π 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
- Node.js 18+
- pnpm (recommended) or npm
- Clone the repository:
git clone https://github.com/yourusername/home-dashboard.git
cd home-dashboard- Install dependencies:
pnpm install- Set up environment variables:
cp env.example .envEdit .env and configure your API keys and settings.
- Start the development server:
pnpm devThe app will be available at http://localhost:5173
This dashboard is designed to run continuously on a tablet at home. Here are some setup recommendations:
- Open the dashboard in Chrome
- Add to Home Screen for full-screen experience
- Enable "Guided Access" to prevent accidental navigation away
- Disable auto-lock in Settings > Display & Brightness > Auto-Lock
- Open the dashboard in Chrome
- Add to Home Screen for full-screen experience
- Use "Kiosk Mode" apps to lock the tablet to the dashboard
- Adjust screen timeout settings to keep display on
- Connect your tablet to your home WiFi
- Configure the
LOCAL_IPandALLOWED_IP_*variables in.envto include your home network IPs - The dashboard includes IP-based access control for security
- Keep the tablet plugged in continuously
- Consider using a tablet stand or wall mount
- Adjust screen brightness for comfortable 24/7 viewing
# 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:watchsrc/
βββ 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
If you're outside Quebec, you can easily adapt the dashboard:
- Disable Quebec-specific widgets in the settings modal (βοΈ icon)
- Replace transit widgets: Modify
src/lib/services/bikeService.tsandsrc/lib/services/rtcService.tsto use your local transit APIs - Adjust location settings: Update
PUBLIC_DEFAULT_LATandPUBLIC_DEFAULT_LONin.envfor your location - Customize content sources: Update API endpoints in the service files to match your preferred data sources
- Create a new widget component in
src/lib/components/dashboard/ - Create a corresponding service in
src/lib/services/if needed - Register the widget in
src/routes/+page.svelte:
let availableWidgets = [
// ... existing widgets
{
name: 'myWidget',
active: false,
component: MyWidget,
},
];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.
The dashboard includes IP-based access control. Configure allowed IPs in your environment variables or through the ipRestrictionService.
- Framework: SvelteKit
- Language: TypeScript
- Styling: TailwindCSS
- UI Components: shadcn-svelte
- Icons: Lucide Svelte
- Build Tool: Vite
Build the production version:
pnpm buildThe 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.
Contributions are welcome! Please feel free to submit a Pull Request.
- 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
