ZenBoard is a calmer, local-first Chrome new tab extension built with React, TypeScript, and Vite. It replaces the default new tab page with a customizable dashboard for search, time, weather, calendar, notes, most-visited sites, and rotating wallpapers.
- Chrome new tab override using Manifest V3.
- Bookmark-first search with selected-engine fallback,
/bookmark focus, and.direct engine focus. - Clock, weather, calendar, notes, and most-visited widgets.
- Grid layout mode with draggable and resizable widgets.
- Floating and bento layout modes with magnification and widget size controls.
- Generated canvas wallpapers, custom image/video backgrounds, and optional Unsplash wallpapers.
- Local settings storage for layout, notes, liked wallpapers, API keys, and widget preferences.
- Optional Tomorrow.io weather integration.
- Optional Unsplash wallpaper integration with local cache support.
- React 18
- TypeScript
- Vite
- Chrome Extension Manifest V3
- react-grid-layout
- lucide-react
Install dependencies:
npm installRun the local dev server:
npm run devBuild the extension:
npm run buildThe production extension output is generated in dist/.
- Run
npm run build. - Open Chrome and go to
chrome://extensions. - Enable Developer mode.
- Click Load unpacked.
- Select the generated
dist/folder. - Open a new tab.
API keys are optional. Without them, ZenBoard still works with generated wallpapers, local notes, calendar, search, and fallback/demo weather data.
Used for live weather data.
- Create a free Tomorrow.io account.
- Open the Weather API dashboard.
- Copy the default API key from the API Keys section.
- Open ZenBoard settings, go to API Keys, and paste it under Tomorrow.io.
Used for live wallpaper photos.
- Create an Unsplash developer app.
- Open the app's Keys section.
- Copy the Access Key. The Secret Key is not needed.
- Open ZenBoard settings, go to API Keys, and paste it under Unsplash.
- In the Background tab, choose Unsplash as the source.
ZenBoard is local-first. Settings, notes, liked wallpapers, cached Unsplash wallpapers, and API keys are stored locally using browser storage or local storage. The extension only calls external APIs when the user adds the relevant API key and enables that feature.
Chrome permissions are used for:
storage: save settings and cached extension data.bookmarks: power bookmark search.historyandtopSites: show most-visited sites.
Host permissions are limited to Tomorrow.io and Unsplash endpoints used by the weather and wallpaper integrations.
src/
components/ UI components and widgets
constants/ Default tweak/settings values
hooks/ Reusable React state hooks
lib/ Storage, migration, and rendering helpers
services/ External API integrations
styles/ Application CSS
types/ Shared TypeScript types
npm run dev: start Vite locally.npm run build: type-check and build the extension intodist/.npm run preview: preview the built Vite app locally.




