A modern, customizable browser start page built with Astro and React. Features a clean UI, multiple search engines, theme switching, and persistent configuration. Perfect for self-hosted server dashboards and new tab pages.
Note: This project was heavily influenced by SUI, a start page that served as my daily driver for many years. After 5-6 years since its last update, I decided to modernize the concept with current web technologies while maintaining its core functionality and simplicity.
- 🎨 Multiple pre-defined themes with easy customization
- 🔍 Support for multiple search engines
- 📱 Responsive design that works on all devices
- 📦 Simple JSON-based configuration
- 🐳 Easy Docker deployment
- 🔄 Persistent configuration with file-based storage
- 🎯 Clean, modern UI with Lucide icons
- ⚡ Fast and lightweight
- 🌤️ Widget support (Weather, Clock, and more to come)
- Node.js (v18 or higher)
- npm or yarn
- OpenWeather API key (for weather widget)
- Clone the repository:
git clone https://github.com/ericblue/modern-start-page.git
cd modern-start-page- Install dependencies:
npm install- Create a
.envfile based on.env.exampleand add your OpenWeather API key:
cp .env.example .env
# Edit .env and add your OpenWeather API key- Start the development server:
npm run dev- Build for production:
npm run buildThe application uses a simple JSON file storage system for configuration. Here's the default configuration structure:
{
"contexts": [
{
"id": "default",
"name": "Default",
"categories": [
{
"name": "Development",
"displayMode": "icon",
"links": [
{
"name": "GitHub",
"url": "https://github.com",
"icon": "github"
},
{
"name": "GitLab",
"url": "https://gitlab.com",
"icon": "gitlab"
}
]
},
{
"name": "Social",
"displayMode": "icon",
"links": [
{
"name": "Twitter",
"url": "https://twitter.com",
"icon": "twitter"
},
{
"name": "Reddit",
"url": "https://reddit.com",
"icon": "reddit"
}
]
}
]
}
],
"activeContext": "default",
"theme": "dark",
"gridColumns": 4,
"displayMode": "icon",
"showCategoryBorders": true,
"widgets": {
"weather": {
"enabled": true,
"useCelsius": false
},
"clock": {
"enabled": true,
"showSeconds": true
}
}
}The start page includes several widgets that can be enabled/disabled and customized:
-
Weather Widget: Shows current weather conditions based on your location
- Requires an OpenWeather API key
- Can toggle between Celsius and Fahrenheit
- Automatically detects your location
-
Clock Widget: Displays the current time
- Can show/hide seconds
- Updates in real-time
Widget settings can be configured through the settings modal, where you can:
- Enable/disable individual widgets
- Configure widget-specific settings
- Customize the appearance and behavior
- Theme selection (Dark/Light)
- Layout customization (grid columns, display mode)
- Quick links management with icons
- Search engine preferences
- Multiple contexts for different use cases
- Category-based organization
The application can be run in a Docker container:
# Build the image
docker build -t modern-start-page:latest .
# Run the container
docker run -p 4000:4000 modern-start-page:latest- Click the three-dot menu (⋮) in the top-right corner
- Go to Settings
- Under "On startup", select "Open a specific page or set of pages"
- Click "Add a new page"
- Enter your Modern Start Page URL (e.g.,
http://localhost:4000or your deployed URL) - Click "Add"
- Click the three-line menu (☰) in the top-right corner
- Go to Settings
- Under "Home" section, find "Homepage and new windows"
- Select "Custom URLs..."
- Enter your Modern Start Page URL (e.g.,
http://localhost:4000or your deployed URL) - Click "Save"
- Click Safari in the menu bar
- Go to Settings (or Preferences)
- Select the "General" tab
- In the "Homepage" field, enter your Modern Start Page URL (e.g.,
http://localhost:4000or your deployed URL) - Close the settings window
Note: If you're running Modern Start Page locally, make sure to use the correct port number (default is 4000). For production deployments, use your deployed URL.
Contributions are welcome! Please feel free to submit a Pull Request.
This project is licensed under the MIT License - see the LICENSE file for details.
Created by Eric Blue (https://ericblue.com)
