6 Commits

Author SHA1 Message Date
fee538f044 fixing issue with icon picker
All checks were successful
Build and Release to Staging / Build Vision Start (push) Successful in 7s
Build and Release to Staging / Build Vision Start Image (push) Successful in 1m3s
Build and Release to Staging / Deploy Vision Start (staging) (push) Successful in 7s
Build and Release / build (push) Successful in 15s
Build and Release / virus-total-check (push) Successful in 38s
Build and Release / release (push) Successful in 4s
Build and Release / Build Vision Start Image (push) Successful in 1m3s
Build and Release / Deploy Vision Start (production) (push) Successful in 2s
2026-07-10 21:18:26 -03:00
48ec764880 improving icons and fixing pipeline
All checks were successful
Build and Release to Staging / Build Vision Start (push) Successful in 9s
Build and Release to Staging / Build Vision Start Image (push) Successful in 1m4s
Build and Release to Staging / Deploy Vision Start (staging) (push) Successful in 2s
Build and Release / build (push) Successful in 51s
Build and Release / virus-total-check (push) Successful in 54s
Build and Release / release (push) Successful in 7s
Build and Release / Build Vision Start Image (push) Successful in 1m3s
Build and Release / Deploy Vision Start (production) (push) Successful in 2s
2026-07-10 20:58:06 -03:00
babd31548c fixing some things
All checks were successful
Build and Release to Staging / Build Vision Start (push) Successful in 8s
Build and Release to Staging / Build Vision Start Image (push) Successful in 1m3s
Build and Release to Staging / Deploy Vision Start (staging) (push) Successful in 2s
2026-07-10 20:34:43 -03:00
95ae04ecd2 moving icons
All checks were successful
Build and Release to Staging / Build Vision Start (push) Successful in 8s
Build and Release to Staging / Build Vision Start Image (push) Successful in 1m3s
Build and Release to Staging / Deploy Vision Start (staging) (push) Successful in 7s
2026-07-10 20:26:04 -03:00
7a137abb66 updating manifest and adding icons
Some checks failed
Build and Release to Staging / Build Vision Start (push) Failing after 7s
Build and Release to Staging / Build Vision Start Image (push) Has been skipped
Build and Release to Staging / Deploy Vision Start (staging) (push) Has been skipped
2026-07-10 20:23:56 -03:00
023b2ffdc5 updating pipelines 2026-07-10 20:23:43 -03:00
11 changed files with 53 additions and 24 deletions

View File

@@ -15,27 +15,38 @@ env:
jobs: jobs:
build: build:
name: Build Vision Start name: Build Vision Start
if: gitea.event_name == 'push'
runs-on: ubuntu-amd64 runs-on: ubuntu-amd64
steps: steps:
- name: Check out repository code - name: Check out repository code
uses: actions/checkout@v4 uses: actions/checkout@v4
- name: Setup required tools
run: sudo apt-get install zip jq curl -y
- name: Install JS dependencies - name: Install JS dependencies
run: npm install run: npm install
- name: Run build - name: Run build
run: npm run build
- name: Package dist as zip
run: | run: |
cd dist bash scripts/prepare_release.sh
zip -r ../vision-start-build.zip . npm run build
- name: Upload build artifact - name: Prepare release
run: |
mv dist vision-start/
mv extension vision-start/
mv manifest.json vision-start/
- name: Create zip archive
run: |
cd vision-start
zip -r ../vision-start-${{ gitea.ref_name }}.zip *
- name: Upload artifact
uses: actions/upload-artifact@v3 uses: actions/upload-artifact@v3
with: with:
name: vision-start-build name: release-zip
path: vision-start-build.zip path: vision-start-${{ gitea.ref_name }}.zip
retention-days: 30
build_vision_start: build_vision_start:
name: Build Vision Start Image name: Build Vision Start Image

View File

@@ -19,19 +19,29 @@ jobs:
steps: steps:
- name: Check out repository code - name: Check out repository code
uses: actions/checkout@v4 uses: actions/checkout@v4
- name: Setup required tools - name: Setup required tools
run: sudo apt-get install zip jq curl -y run: sudo apt-get install zip jq curl -y
- name: Install JS dependencies - name: Install JS dependencies
run: npm install run: npm install
- name: Run build - name: Run build
run: npm run build
- name: Prepare release
run: | run: |
bash scripts/prepare_release.sh bash scripts/prepare_release.sh
npm run build
- name: Prepare release
run: |
mv dist vision-start/ mv dist vision-start/
mv extension vision-start/
mv manifest.json vision-start/ mv manifest.json vision-start/
- name: Create zip archive - name: Create zip archive
run: zip -r vision-start-${{ gitea.ref_name }}.zip vision-start run: |
cd vision-start
zip -r ../vision-start-${{ gitea.ref_name }}.zip *
- name: Upload artifact - name: Upload artifact
uses: actions/upload-artifact@v3 uses: actions/upload-artifact@v3
with: with:

View File

@@ -1,9 +1,9 @@
<div style="display: flex; justify-content: center; font-size: 2rem; font-weight: bold;"> <div style="display: flex; justify-content: center; align-items: center; font-size: 2rem; font-weight: bold;">
Vision Start <img src="extension/icons/vision-48.png" alt="Vision Start" width="32" height="32" style="margin-right: 1rem;"> Vision Start
</div> </div>
<div style="display: flex; justify-content: center; font-size: 1.5rem;"> <div style="display: flex; justify-content: center; font-size: 1.5rem;">
A light liquid-glass, modern and customizable startpage built with React. A light, modern and customizable startpage built with React.
</div> </div>
<span style="display: block; text-align: center; font-size: 1.2rem;">Try it here: <a href="http://vision-start.ivanch.me">http://vision-start.ivanch.me</a></span> <span style="display: block; text-align: center; font-size: 1.2rem;">Try it here: <a href="http://vision-start.ivanch.me">http://vision-start.ivanch.me</a></span>

View File

@@ -33,12 +33,16 @@ const WebsiteEditModal: React.FC<WebsiteEditModalProps> = ({ website, edit, onCl
const [icon, setIcon] = useState(website ? website.icon : ''); const [icon, setIcon] = useState(website ? website.icon : '');
const [iconQuery, setIconQuery] = useState(''); const [iconQuery, setIconQuery] = useState('');
const [filteredIcons, setFilteredIcons] = useState<IconMetadata[]>([]); const [filteredIcons, setFilteredIcons] = useState<IconMetadata[]>([]);
const [iconMetadata, setIconMetadata] = useState<IconMetadata[]>([]); const [iconMetadata, setIconMetadata] = useState<IconMetadata[]>(() => iconMetadataCache ?? []);
const [iconsFetched, setIconsFetched] = useState(false); const [iconsFetched, setIconsFetched] = useState(() => iconMetadataCache !== null);
const debounceRef = useRef<number | null>(null); const debounceRef = useRef<number | null>(null);
const ensureIconMetadata = () => { const ensureIconMetadata = () => {
if (iconMetadataCache || iconsFetched) return; if (iconMetadataCache) {
setIconMetadata(iconMetadataCache);
return;
}
if (iconsFetched) return;
setIconsFetched(true); setIconsFetched(true);
fetch('/icon-metadata.json', { cache: 'force-cache' }) fetch('/icon-metadata.json', { cache: 'force-cache' })
.then(response => response.json()) .then(response => response.json())

Binary file not shown.

After

Width:  |  Height:  |  Size: 23 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.5 KiB

BIN
icon.png

Binary file not shown.

Before

Width:  |  Height:  |  Size: 763 KiB

View File

@@ -1,14 +1,19 @@
{ {
"manifest_version": 3, "manifest_version": 3,
"name": "Vision Startpage", "name": "Vision Startpage",
"version": "1.0", "version": "1.0.0",
"description": "A beautiful and customizable startpage for your browser.", "description": "A light, modern and customizable startpage.",
"chrome_url_overrides": { "chrome_url_overrides": {
"newtab": "index.html" "newtab": "index.html"
}, },
"permissions": [ "permissions": [
"storage" "storage"
], ],
"icons": {
"16": "extension/icons/vision-16.png",
"48": "extension/icons/vision-48.png",
"128": "extension/icons/vision-128.png"
},
"content_security_policy": { "content_security_policy": {
"extension_pages": "script-src 'self'; object-src 'self';" "extension_pages": "script-src 'self'; object-src 'self';"
} }

View File

@@ -68,7 +68,7 @@ Performance notes:
- `Clock` updates on the minute boundary (one `setTimeout``setInterval(60_000)`) instead of every second. - `Clock` updates on the minute boundary (one `setTimeout``setInterval(60_000)`) instead of every second.
- `jsping` cancels its 5s timeout on image resolve/error and nulls the `Image` handlers, preventing leaks across ping cycles. - `jsping` cancels its 5s timeout on image resolve/error and nulls the `Image` handlers, preventing leaks across ping cycles.
- `ServerWidget` batches pending-status updates into one `setState` and depends on a stable servers signature (ids+addresses) so unrelated config edits don't restart pings. - `ServerWidget` batches pending-status updates into one `setState` and depends on a stable servers signature (ids+addresses) so unrelated config edits don't restart pings.
- Icon metadata (`/icon-metadata.json`) is module-level cached, fetched lazily on first focus of the icon field with `cache: 'force-cache'`, filter debounced ~150ms, and color variants are expanded lazily during filtering rather than upfront. - Icon metadata (`/icon-metadata.json`) is module-level cached and hydrated into each icon-picker instance, fetched lazily on first focus of the icon field with `cache: 'force-cache'`, filter debounced ~150ms, and color variants are expanded lazily during filtering rather than upfront.
- `Wallpaper` caches resolved wallpaper URLs in a module-level `Map`; its image transition and readability overlay classes live in `index.css`. - `Wallpaper` caches resolved wallpaper URLs in a module-level `Map`; its image transition and readability overlay classes live in `index.css`.
Planned / To-do (tracked in `README.md`): Planned / To-do (tracked in `README.md`):
@@ -88,7 +88,6 @@ vision-start/
├── types.ts # Core domain types (Config, Category, Website, Server, Wallpaper) ├── types.ts # Core domain types (Config, Category, Website, Server, Wallpaper)
├── constants.tsx # DEFAULT_CATEGORIES seed data ├── constants.tsx # DEFAULT_CATEGORIES seed data
├── manifest.json # Chrome MV3 manifest (newtab override, storage permission) ├── manifest.json # Chrome MV3 manifest (newtab override, storage permission)
├── icon.png # Extension icon source
├── components/ ├── components/
│ ├── Clock.tsx # Header clock widget │ ├── Clock.tsx # Header clock widget

Binary file not shown.

Before

Width:  |  Height:  |  Size: 763 KiB

After

Width:  |  Height:  |  Size: 265 KiB