Your personal start page application - by sfarrand.com
Introduction
mySites is a personal start page application that allows you to organize and quickly access your favorite web sites. Built with standard HTML, CSS, and JavaScript, mySites runs entirely in your browser - no server or internet connection required after installation. All page data is stored in your browser's IndexedDB, providing persistent storage that survives browser refreshes and device restarts.
π Multiple Pages
Organize your links across 6 pages (Home + 5 category pages) with customizable navigation buttons.
π Grid Layout
Each page contains a 13Γ5 grid (65 cells) for organizing up to 390 total links across all pages.
π Drag & Drop
Easily reorganize cells within a page or move them between pages using intuitive drag-and-drop. Auto-saves changes.
βοΈ Easy Editing
Simple edit mode lets you add, modify, or remove URLs and labels with modal dialogs and direct heading editing.
πΎ IndexedDB Storage
All page data is stored in your browser's IndexedDB, providing persistent storage that survives browser refreshes.
Restore pages to previous saved states with per-page undo history (up to 5 snapshots per page).
ποΈ Trash (Cell) Delete
Quickly delete cells by dragging them to the trash icon in the footer. Works in any mode.
π₯π€ Import/Export
Export and import pages as JSON files for backup, transfer, or sharing. Supports single pages or full system.
π Live Clock
Footer displays current date and time, updating automatically every second.
π€ Profile & Updates
A lightweight mySites profile lets you receive update notifications and manage registration info. You can open it any time from the System Menu.
πΌοΈ Custom Header Avatar
Right-click the header logo to swap the stock logo for your own avatar or other graphic. The logo manager can save your artwork directly into the images/ folder using the File System Access API, so your custom avatar loads instantly on every visit.
Double-click index.html to open mySites in your default web browser, or click here to open it now.
Current Installation Directory:
This directory was automatically detected. Files in this directory:
index.html - Main application (all pages are virtual)
Note: Pages (Home + Pages 1-5) are now virtual pages stored in browser IndexedDB, not separate HTML files.
Note: mySites is free to use. Donations are always welcome to help support continued development and improvements. Visit https://www.sfarrand.com/payments if you'd like to contribute.
Getting Started
Understanding the Interface
When you first open mySites, you'll see:
Header: Contains the mySites logo and navigation buttons at the top
Grid: The main content area with 13 rows and 5 columns of cells
Footer: Contains graphic icon buttons (Edit/Save, Undo, Trash), copyright information, and live clock
Navigation Buttons
The navigation bar at the top includes:
Home - Returns to the home page (index.html)
Page1 through Page5 - Navigate to category pages
Google - Quick link to Google search
ChatGPT - Quick link to ChatGPT
Adding and Editing URLs
Adding URLs to your mySites pages is simple and straightforward. Each cell in the grid can contain a link to a website, email address, file, or any other URL format your browser supports.
Step 1: Enter Edit Mode
Click the graphic icon button in the lower left corner of the footer.
You'll notice that small "hot spot" icons appear in the upper right corner of each cell.
The Edit icon button changes to show the icon when in edit mode.
Step 2: Add a URL
Click on the hot spot icon (crosshair cursor) in the cell where you want to add a URL.
A dialog box will appear with two fields:
URL: Enter the full web address (e.g., https://www.example.com)
Label: Enter a descriptive name for the link (e.g., "Example Website")
Click Done to save the URL to that cell, or Clear to remove it.
Repeat this process for as many cells as you want to populate.
Step 3: Save Your Changes
Once you've added all the URLs you want on the current page, click the graphic icon button in the footer.
Your changes are immediately saved to IndexedDB (your browser's local database).
After saving, Edit Mode automatically exits, and your links become "live" - you can click them to navigate to the websites.
Your changes are now persistent and will survive browser refreshes.
πΎ Save Tip: All page data is stored in your browser's IndexedDB. This means your changes are automatically saved to your browser's local storage and persist across sessions. You don't need to manage separate HTML files - everything is stored in the database.
Editing Existing URLs
To modify an existing URL or label:
Enter Edit Mode by clicking the graphic icon button in the footer.
Click the hot spot icon (crosshair cursor) on the cell containing the URL you want to edit.
A modal dialog will appear with the current URL and label - modify them as needed.
Click Done to save changes, or press ESC to cancel.
The graphic icon button will turn orange and change to show the icon to indicate unsaved changes.
Click the graphic icon button to save your changes to IndexedDB.
πΎ Save Tip: After editing, click the graphic icon button to persist your changes to IndexedDB. The page data is stored in your browser's database, not as separate HTML files.
Removing URLs
To remove a URL from a cell:
Enter Edit Mode.
Click the hot spot icon on the cell.
Click Clear in the dialog box, then Done.
The cell is automatically saved to IndexedDB when cleared (no manual save needed for clear operations).
πΎ Save Tip: Clearing a cell automatically saves the change to IndexedDB. You don't need to manually save after clearing cells, but you should save if you've made other edits in the same session.
Important: Always save your page after making changes! If you navigate away without saving, your changes will be lost. The browser will warn you if you try to leave a page with unsaved changes while in Edit Mode.
Editing Navigation Buttons and Column Headings
Customizing Navigation Button Labels
By default, navigation buttons are labeled "Page1", "Page2", etc. You can customize these to represent the category of links on each page (e.g., "Work Sites", "Streaming", "Social Media").
Changing Navigation Button Labels
Enter Edit Mode by clicking the graphic icon button in the footer.
Click directly on the navigation button you want to rename (e.g., "Page1").
A modal dialog will appear with the current button label pre-filled.
Type your desired label (e.g., "Streaming Sites").
Click Done or press ESC to cancel.
The button label is updated immediately, and the page is marked as needing save.
Click the graphic icon button to persist the change to IndexedDB.
πΎ Save Tip: Navigation button labels are stored per-page in IndexedDB. Each page can have its own label for each navigation button. After changing a label, click the graphic icon button to persist the change.
Note: Navigation button labels are stored per-page. This means you can have different labels for the same button on different pages if desired. For example, "Page1" might be labeled "Work" on the Home page but "Personal" on Page2.
Customizing Column Headings
Each page has 5 column headings (Heading 1, Heading 2, etc.) that you can customize to represent subcategories (e.g., "News", "Tools", "Entertainment").
Changing Column Headings
Enter Edit Mode by clicking the graphic icon button in the footer.
Click directly on the column heading you want to change (e.g., "Heading 1").
The heading text will become editable - no dialog box appears for this.
Type your new heading name directly.
Click elsewhere or press Enter to finish editing that heading.
Repeat for other column headings as needed.
The graphic icon button will turn orange and change to show the icon to indicate unsaved changes.
Click the graphic icon button to save your changes to IndexedDB.
πΎ Save Tip: Column headings are stored per-page in IndexedDB. After editing headings, click the graphic icon button to persist your changes. Each page can have its own unique column headings.
Edit Mode Overview
When you click the graphic icon button, you enter Edit Mode, which allows you to:
Add or edit URLs in cells (via modal dialog)
Rename navigation buttons (via modal dialog)
Change column headings (direct inline editing - click the heading and type)
Drag and drop cells (works in both Edit Mode and normal mode - see next section)
You can perform all these actions in a single Edit Mode session. The graphic icon button turns orange and changes to show the icon when you have unsaved changes. Click the graphic icon button to persist your changes to IndexedDB.
Note: Column headings can be edited directly by clicking on them - no modal dialog appears. Just click the heading, type your new text, and press Enter or click elsewhere to finish editing.
Drag and Drop Functionality
One of the most powerful features of mySites is the ability to reorganize cells using drag and drop. You can move cells within the same page or even between different pages!
Drag and Drop Basics
Drag and drop works in both Edit Mode and normal viewing mode, making it easy to reorganize your links at any time. Changes are automatically saved to IndexedDB after drag and drop operations complete.
Moving Cells on the Same Page
Click and hold on a cell that contains content (a link).
Drag the cell to a different cell on the same page.
Release the mouse button to drop the cell.
The two cells will swap positions automatically.
The page is automatically saved to IndexedDB after the swap completes.
You'll notice the button may briefly show as (orange) if there are other unsaved changes, but drag-and-drop operations are saved automatically.
Cross-Page Drag and Drop
You can also move cells between different pages - perfect for reorganizing your links across categories!
Moving Cells Between Pages
Click and hold on a cell containing content on the source page.
While holding, drag the cell over a navigation button for the destination page (e.g., "Page2").
The navigation button will highlight to show it's ready to receive the drag.
Release the mouse button while over the navigation button.
mySites will automatically navigate to the destination page.
On the new page, you'll see a message: "Click on a cell to place the dragged content here".
Click on any cell where you want to place the content.
Your content moves to the target cell on the new page, and the source cell becomes empty (this is a move operation, not a swap).
Both pages are automatically saved to IndexedDB after the move completes.
Tip: When moving cells between pages, the system performs a "move" operation. The content moves to the target cell, and the source cell becomes empty. This is different from same-page drags, which swap content.
Deleting Cells with Trash
You can delete cells by dragging them to the trash icon in the footer.
Deleting a Cell
Click and hold on a cell containing content.
Drag the cell over the trash icon in the footer (next to the Undo button).
The trash icon will highlight to show it's ready to receive the drag.
Release the mouse button while over the trash icon.
The cell content is immediately cleared and the page is automatically saved.
This works for cells on the current page or cells being dragged from other pages.
Drag and Drop Features
Visual Feedback: The cell being dragged becomes semi-transparent (50% opacity) so you can see what you're moving.
Automatic Saving: All drag and drop operations are automatically saved to IndexedDB - no manual save required.
Same-Page Swaps: Cells automatically swap positions when dropped on the same page.
Cross-Page Moves: Content moves to the target page, source cell becomes empty.
Trash Deletion: Drag any cell to the graphic icon button in the footer to delete it.
Navigation Button Highlighting: Navigation buttons highlight when you drag over them for cross-page moves.
Drag and Drop Limitations
You can only drag cells that contain content (URLs or labels).
Empty cells cannot be dragged.
You cannot drag onto invalid targets (the system will show an error message).
Note: Drag and drop operations are automatically saved to IndexedDB. You don't need to manually save after drag and drop, but you may want to save if you've made other changes in Edit Mode.
Saving and Managing Pages
Understanding the Save Process
mySites uses IndexedDB (a browser database) to store all page data. When you click the graphic icon button, your changes are saved directly to IndexedDB - no file download required. All pages are stored as virtual pages in the database.
How to Save
After making changes in Edit Mode, click the graphic icon button in the footer.
Your changes are immediately saved to IndexedDB.
The icon button returns to show the icon and Edit Mode exits automatically.
Your changes are now persistent and will survive browser refreshes.
πΎ Save Tip: All page data is stored in your browser's IndexedDB. This means your changes are automatically saved to your browser's local storage and persist across sessions. You don't need to manage separate HTML files - everything is stored in the database.
Unsaved Changes Indicators
mySites helps you keep track of which pages have unsaved changes:
Orange Save Button: The graphic icon button turns orange and changes to show the icon when the current page has unsaved changes from Edit Mode operations.
Automatic Saving: Drag and drop operations and cell clearing are automatically saved - no manual save needed for these operations.
Saving After Drag and Drop
Drag and drop operations are automatically saved to IndexedDB:
After a same-page drag, the page is automatically saved.
After a cross-page drag, both the source and destination pages are automatically saved.
After dragging to trash, the page is automatically saved.
You don't need to manually save after drag and drop operations.
Important: Changes made in Edit Mode (editing URLs, labels, headings, or nav buttons) must be manually saved by clicking the graphic icon button. Drag and drop operations are automatically saved.
Best Practices for Saving
Save frequently when in Edit Mode, especially after making multiple changes.
Before closing mySites, check if the Save button is orange to see if the current page needs saving.
Remember that drag and drop operations save automatically - you only need to save after Edit Mode changes.
Use the Export feature (see Import/Export section) to create backups of your pages.
Undo Functionality
mySites includes a powerful Undo feature that allows you to restore a page to its previous saved state.
How Undo Works
The graphic icon button (located in the footer next to the Edit/Save button) restores the current page to its most recent saved state. Each page maintains its own independent undo history.
Using Undo
Click the graphic icon button in the footer.
If undo history exists for the current page, the page is restored to its previous saved state.
The page grid is immediately re-rendered with the restored data.
The Undo button becomes disabled if no more history is available for that page.
Undo History Details
Per-Page History: Each page (Home, Page1, Page2, etc.) maintains its own separate undo history.
Automatic Snapshots: A snapshot is automatically created each time you save a page (manually or via auto-save from drag and drop).
History Limit: Each page stores up to 5 recent snapshots. Older snapshots are automatically removed.
Persistent Storage: Undo history is stored in IndexedDB, so it survives browser refreshes and device restarts.
Complete Page Restore: Undo restores the entire page state, including all links, headings, and navigation button labels.
Undo Button States
Enabled: The button is clickable when the current page has at least one saved snapshot in history.
Disabled: The button is grayed out and disabled when there's no undo history for the current page.
Tip: Undo only works for pages that have been saved at least once. If you've never saved a page, or if you've cleared the history, the Undo button will be disabled for that page.
Clearing Undo History
You can clear all undo history for all pages using the Global Menu:
Click the hamburger menu (β°) in the header.
Select Clear Undo History under the Site Data section.
Confirm the action - this will remove all saved snapshots and disable Undo for all pages until new saves occur.
Important: Clearing history permanently removes all undo snapshots. Consider exporting your pages as a backup before clearing history.
Trash (Delete) Functionality
You can delete cells by dragging them to the graphic icon button in the footer.
Deleting Cells
How to Delete a Cell
Click and hold on a cell that contains content (a link).
Drag the cell over the graphic icon button in the footer (located next to the Undo button).
The trash icon will highlight to show it's ready to receive the drag.
Release the mouse button while over the trash icon.
The cell content is immediately cleared (URL and label removed).
The change is automatically saved to IndexedDB.
Trash Features
Works in Any Mode: You can drag to trash in both Edit Mode and normal viewing mode.
Cross-Page Deletion: You can drag a cell from one page, navigate to another page, and drop it in the trash - the source cell will be cleared.
Automatic Saving: Deleted cells are automatically saved - no manual save required.
Visual Feedback: The trash icon highlights when you drag a cell over it.
Toast Notification: A success message appears when a cell is successfully cleared.
Tip: You can also clear cells by entering Edit Mode, clicking the hot spot, and clicking "Clear" in the dialog. Both methods work and automatically save the change.
Note: The graphic icon button is always visible in the footer, making it easy to delete cells at any time without entering Edit Mode.
Import and Export Functionality
mySites allows you to export and import page data as JSON files. This is useful for backing up your pages, transferring data between devices, or sharing page configurations.
Accessing Import/Export
All import and export functions are accessed through the Global Menu (hamburger icon β°) in the header:
Click the hamburger menu icon (β°) in the top-right corner of the header.
A dropdown menu appears with several sections.
Use the options under "Page" for single-page operations, or "Full System" for all pages.
Export Options
Export Current Page
Open the Global Menu (β°).
Click Export Page under the "Page" section.
A JSON file is automatically downloaded with a filename like mySites-export-PageName_YYMMDD-HHMMSS.json.
The file contains all data for the current page: links, headings, and navigation button label.
Export (Backup) - All Pages
Open the Global Menu (β°).
Click Export (Backup) under the "Full System" section.
A JSON file is automatically downloaded with a filename like mySites-export-system_YYMMDD-HHMMSS.json.
The file contains all data for all pages (Home + Pages 1-5).
Import Options
Import Current Page
Open the Global Menu (β°).
Click Import Page under the "Page" section.
Select a JSON file that was previously exported from mySites.
A dialog appears asking you to choose which page to import the data into.
Select the target page (you can import into any page, not just the current one).
Confirm the import - this will overwrite all data on the target page.
The imported data replaces all content on the target page.
Import All Pages
Open the Global Menu (β°).
Click Import under the "Full System" section.
Confirm that you want to import - this will overwrite every page in mySites.
Select a JSON file that contains a full system export.
All pages are imported and overwritten with the data from the file.
Import/Export Features
JSON Format: All exports are in standard JSON format, making them easy to read and edit if needed.
Complete Data: Exports include all page data: links, column headings, and navigation button labels.
Timestamped Filenames: Export files include timestamps in the filename for easy organization.
Overwrite Protection: Import operations warn you before overwriting existing data.
Target Selection: Single-page imports let you choose which page to import into.
Important: Import operations overwrite existing data. Always export your pages as a backup before importing, especially when using "Import All".
Backup Tip: Regularly export all pages as a backup. The "Export (Backup)" feature creates a single file containing all your pages, making it easy to restore everything if needed.
Export File Format
Export files contain the following structure:
Single Page Export: Contains a page object with pageId, navButtonLabel, headings, cells, and lastModified.
Full System Export: Contains a pages array with all pages, plus formatVersion and exportedAt timestamp.
Note: Export files are standard JSON and can be opened in any text editor. However, be careful when editing them manually - invalid JSON will cause import to fail.
System Menu & Settings
The hamburger icon (β°) in the header opens the global system menu. It is organized into Site Data, Settings, and About so the controls you need most often are never more than two clicks away.
Site Data Actions
Clear Undo History: Removes every stored snapshot for all pages. Use this when you want a clean slate for Undo. The confirmation dialog reminds you to export first.
Page βΈ submenu: Import, Export, or Clear only the page you select. Import prompts you to choose the destination page before overwriting anything.
Full System βΈ submenu: Import overwrites all six virtual pages, Export (Backup) downloads the consolidated JSON backup, and Clear rebuilds every page with default content.
Export Reminder Slider
The Settings section contains an Export Reminder slider with a live readout (e.g., β8 editsβ). mySites tracks how many edits you make per session and, once you cross the threshold, prompts you to do a full backup. Set the slider to 0 to disable reminders, or drag it higher (up to 50) if you prefer fewer prompts. The value is saved in localStorage so it persists across reloads.
Themes and About
The Settings section also houses the Themes βΈ submenu (see the next section for details). The final entry, About mySites, opens the modal dialog with the current version, author links, and donation information.
Themes & Appearance
mySites ships with ten color themes (Default, Ocean, Forest, Sunset, Midnight, Rose, Slate, Teal, Amber, and Lavender). Themes are applied instantly and the selection is saved to localStorage (per browser) so the correct palette loads before the interface renders, eliminating flashes of unstyled content.
Changing Themes
Open the system menu (β°) and expand Themes βΈ under the Settings section.
Click any theme button to apply it immediately.
Close the menuβthe chosen theme remains active across reloads and devices that share the same browser profile.
Midnight Theme Enhancements: Midnight now features a deeper background, brighter heading row, and distinct visited/unvisited link colors. Search and AI engine buttons use darker text so they remain readable against the high-contrast buttons you requested.
When a page is empty, an onboarding tooltip appears above the Edit button to highlight how to add links or import data. The tooltip automatically disappears after you add your first link or dismiss it.
Profile & Registration
Recent versions of mySites include a lightweight profile so you can be notified of updates and manage your registration details. Your page content (links, headings, and layout) is still stored locally in IndexedDB; the profile is separate from your saved pages.
First-Run Gate (New Browser / New Profile)
On a new browser profile, mySites may show a Welcome to mySites overlay with an embedded registration page. Completing the registration marks this browser as registered so you wonβt be prompted again on future visits from the same browser profile.
Open Profile from the System Menu
Click the hamburger menu (β°) in the header.
Under Settings, click Profileβ¦.
An overlay opens with the embedded registration page. If you are already registered, it opens directly in βmanage profileβ mode.
Close the overlay using the Γ button in the upper right when youβre done.
Note: Registration completion is tracked locally in your browser (so different browsers/devices will prompt separately). Your mySites pages are unaffected by profile changes.
Custom Logo
You can replace the stock 90Γ90 mySites icon with your own artwork without touching the filesystem manually. The logo manager uses the File System Access API so uploads land directly inside mySites/images/.
Upload Workflow
Right-click the header logo to open the custom logo popover.
Click Grant folder access once so mySites can write to your images/ directory. (Requires Edge/Chrome or the packaged app running from a secure context.)
Click Upload logo and choose a PNG or JPG under 1 MB. Recommended size is 180β360 px square (hard minimum 90 px, maximum 512 px).
The logo is saved into images/, the header updates instantly, and a timestamped status message confirms the change.
Reset or Manual Fallback
Open the popover and click Reset to default to bring back the stock icon.
If your browser does not support the File System Access API, you can still replace the logo by manually copying your image into the images/ folder (for example, overwriting mySites_100x100.png). In this mode the popover continues to work, but the Upload button is disabled because the browser cannot write to disk directly.
Tip: The popover shows whether the images folder is linked and when the current logo was last updated. You can close it from the Γ button or by clicking anywhere outside the card.
Search & AI Engine Buttons
The two buttons at the end of the navigation bar are shortcuts to your preferred search engine and generative AI assistant. They double as selectors so you can change providers without digging into settings.
Change Your Default Engines
Left-click a button to open its current provider in a new tab.
Right-click the button to open the inline picker.
Choose an option (Google, Bing, Brave, DuckDuckGo for Search; ChatGPT, Copilot, Gemini, Claude, Grok, Perplexity for AI). The label updates immediately and the choice is saved to localStorage.
Heads-up: mySites closes the picker automatically if you click outside it or press ESC, mirroring the behavior of the other custom dialogs.
Tips & Tricks
Supported URL Types
mySites supports all URL types that your browser recognizes:
HTTP/HTTPS: Standard web addresses (e.g., https://www.example.com)
Mailto: Email links (e.g., mailto:yourname@example.com) - opens your email client
File: Local file paths (e.g., file:///C:/Users/YourName/Documents/file.pdf) - opens local files
FTP: FTP server addresses (e.g., ftp://ftp.example.com)
Other protocols: Any protocol your browser supports
Tip: Use file:// URLs to create quick links to frequently accessed files on your computer, like documents, spreadsheets, or applications with specific files loaded.
Setting mySites as Your Start Page
Make mySites your browser's start page for instant access to all your links:
Open your browser's settings.
Find the "On startup" or "Home page" section.
Set it to open a specific page or set of pages.
Enter the full path to your index.html file (e.g., file:///C:/Users/YourName/Documents/mySites/index.html).
New Tab Extension
Modern browsers (Chrome, Edge) don't always allow setting a custom new tab page directly. Use the "New Tab Redirect" extension:
Right-click the header logo to open the custom logo popover. From there you can grant folder access, upload a PNG/JPG (under 1 MB), or reset to the default icon without touching the underlying files.
Organizing Your Links
Here are some ideas for organizing your 390 available link slots:
By Category: Use each page for a different category (Work, Personal, Hobbies, etc.)
By Frequency: Put most-used links on the Home page, less-used on category pages
By Priority: Top rows for most important links, bottom rows for occasional use
By Column: Use column headings to create subcategories within each page
Keyboard Shortcuts
ESC: Closes any open modal dialogs (URL input, button label)
Tab: Navigate between form fields in dialogs
Enter: Submit dialogs (when focused on Done button)
Ctrl+Shift+P: Advanced/testing shortcut to reset the first-run registration state for this browser and reload into registration mode.
Troubleshooting
Links Don't Work After Saving
Make sure you saved the page after adding the URL.
Verify the URL is complete and correct (including https:// or http://).
Try opening the link in a new tab to see the actual error message.
Drag and Drop Doesn't Work
Make sure the cell contains content - empty cells cannot be dragged.
For cross-page drags, make sure you drop on a navigation button, not just anywhere.
If a cross-page drag expires, start the drag operation again.
Changes Don't Save
Make sure you click the graphic icon button, not just close the browser.
Confirm that your browser allows local storage/IndexedDB (very restrictive privacy or guest modes can block saves).
If you've recently cleared site data or cookies for this origin, your saved pages and history may have been removed.
Supported Browsers
mySites has been tested and works with:
Microsoft Edge (Chromium-based, recommended)
Google Chrome
Mozilla Firefox
Safari (Mac)
mySites uses standard web technologies and should work in any modern browser that supports HTML5, CSS3, and JavaScript.
Support and Feedback
For questions, bug reports, or feature suggestions, please contact: