WEBPAGE - first upload

This commit is contained in:
Alex Sim committed 2026-03-30 01:26:14 +02:00
1 parent c6ea685b05
commit e01dd28029
14 files changed
+1702

No files matched your search

+6
View File
@@ -0,0 +1,6 @@
_site/
.jekyll-cache/
.jekyll-metadata/
.sass-cache/
vendor/
Gemfile.lock
+8
View File
@@ -0,0 +1,8 @@
source 'https://rubygems.org'
gem 'github-pages', group: :jekyll_plugins
group :jekyll_plugins do
gem 'jekyll-seo-tag'
gem 'jekyll-sitemap'
end
+27
View File
@@ -0,0 +1,27 @@
title: Murine Launcher
description: >-
A modern, lightweight FOSS Launcher3 fork delivering an enhanced stock Android
experience with essential customization and zero bloat.
url: "https://alesimula.github.io"
baseurl: ""
github_repo: "alesimula/Murine-launcher"
icon_url: "https://raw.githubusercontent.com/alesimula/Murine-launcher/refs/heads/main/image/app_icon/icon_browser_fullsize.svg"
screenshots_api: "https://api.github.com/repos/alesimula/Murine-launcher/contents/fastlane/metadata/android/en-US/images/phoneScreenshots"
releases_api: "https://api.github.com/repos/alesimula/Murine-launcher/releases"
permalink: pretty
markdown: kramdown
kramdown:
input: GFM
plugins:
- jekyll-seo-tag
- jekyll-sitemap
exclude:
- Gemfile
- Gemfile.lock
- node_modules
- vendor
+24
View File
@@ -0,0 +1,24 @@
<footer class="site-footer">
<div class="footer-inner">
<div class="footer-brand">
<img src="{{ site.icon_url }}" alt="Murine Launcher" class="footer-icon">
<div>
<div class="footer-name">Murine Launcher</div>
<div class="footer-tagline">{{ site.description }}</div>
</div>
</div>
<div class="footer-links">
<a href="https://github.com/{{ site.github_repo }}" class="footer-link" target="_blank" rel="noopener">
<svg width="20" height="20" viewBox="0 0 24 24" fill="currentColor"><path d="M12 0C5.37 0 0 5.37 0 12c0 5.31 3.435 9.795 8.205 11.385.6.105.825-.255.825-.57 0-.285-.015-1.23-.015-2.235-3.015.555-3.795-.735-4.035-1.41-.135-.345-.72-1.41-1.23-1.695-.42-.225-1.02-.78-.015-.795.945-.015 1.62.87 1.845 1.23 1.08 1.815 2.805 1.305 3.495.99.105-.78.42-1.305.765-1.605-2.67-.3-5.46-1.335-5.46-5.925 0-1.305.465-2.385 1.23-3.225-.12-.3-.54-1.53.12-3.18 0 0 1.005-.315 3.3 1.23.96-.27 1.98-.405 3-.405s2.04.135 3 .405c2.295-1.56 3.3-1.23 3.3-1.23.66 1.65.24 2.88.12 3.18.765.84 1.23 1.905 1.23 3.225 0 4.605-2.805 5.625-5.475 5.925.435.375.81 1.095.81 2.22 0 1.605-.015 2.895-.015 3.3 0 .315.225.69.825.57A12.02 12.02 0 0024 12c0-6.63-5.37-12-12-12z"/></svg>
GitHub
</a>
<a href="https://www.paypal.com/donate/?hosted_button_id=3HRAWU9KVYKKS" class="footer-link" target="_blank" rel="noopener">
<span class="material-symbols-outlined" style="font-size:20px">favorite</span>
Donate
</a>
</div>
<div class="footer-copy">
&copy; {{ 'now' | date: "%Y" }} Murine Launcher &middot; Licensed under Apache 2.0
</div>
</div>
</footer>
+22
View File
@@ -0,0 +1,22 @@
<nav class="top-nav" id="topNav">
<div class="nav-inner">
<a href="{{ '/' | relative_url }}" class="nav-brand">
<img src="{{ site.icon_url }}" alt="Murine Launcher" class="nav-icon">
<span class="nav-title">Murine Launcher</span>
</a>
<div class="nav-actions">
<a href="{{ '/' | relative_url }}" class="nav-link {% if page.url == '/' or page.url == '/index.html' %}active{% endif %}">
<span class="material-symbols-outlined">home</span>
<span class="nav-link-label">Home</span>
</a>
<a href="{{ '/download' | relative_url }}" class="nav-pill {% if page.url contains 'download' %}active{% endif %}">
<span class="material-symbols-outlined">download</span>
<span class="nav-link-label">Download</span>
</a>
<button class="nav-icon-btn" id="themeToggle" aria-label="Toggle theme">
<span class="material-symbols-outlined" id="themeIcon">dark_mode</span>
</button>
</div>
</div>
</nav>
+33
View File
@@ -0,0 +1,33 @@
<!DOCTYPE html>
<html lang="en" data-theme="light">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>{% if page.title %}{{ page.title }} - {{ site.title }}{% else %}{{ site.title }}{% endif %}</title>
<meta name="description" content="{{ page.description | default: site.description }}">
<!-- Google Fonts -->
<link rel="preconnect" href="https://fonts.googleapis.com">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link href="https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700&family=Noto+Sans:wght@400;500;600;700&display=swap" rel="stylesheet">
<!-- Material Symbols -->
<link rel="stylesheet" href="https://fonts.googleapis.com/css2?family=Material+Symbols+Outlined:opsz,wght,FILL,GRAD@20..48,100..700,0..1,-50..200&display=swap">
<link rel="icon" type="image/svg+xml" href="{{ site.icon_url }}">
<link rel="stylesheet" href="{{ '/assets/css/style.css' | relative_url }}">
{% seo %}
</head>
<body>
{% include nav.html %}
<main class="main-content">
{{ content }}
</main>
{% include footer.html %}
<script src="{{ '/assets/js/theme.js' | relative_url }}"></script>
<script src="{{ '/assets/js/github-api.js' | relative_url }}"></script>
</body>
</html>
+18
View File
@@ -0,0 +1,18 @@
---
layout: default
---
<div class="page-container">
{% if page.title %}
<div class="page-header">
<h1>{{ page.title }}</h1>
{% if page.subtitle %}
<p class="subtitle">{{ page.subtitle }}</p>
{% endif %}
</div>
{% endif %}
<div class="page-body">
{{ content }}
</div>
</div>
File diff suppressed because it is too large. Load diff
+26
View File
@@ -0,0 +1,26 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1024 1024" fill="currentColor">
<g
id="#group1"
transform="matrix(3.7200795,0,0,3.7200795,-25.223728,233.21009)">
<path
d="M 0,0 H 1.64 L 1.65,0.78 C 1.23,0.82 0.41,0.9 0,0.93 Z"
id="path1"/>
<path
d="m 24.43,15.6 c 3.89,-0.37 8.9,-1.27 11.7,2.19 2.23,2.48 2.46,5.99 2.48,9.16 0.05,14.34 -0.03,28.69 0.02,43.04 0.07,7.15 1.85,15.04 7.45,19.94 3.83,3.49 9.51,3.38 14.25,2.29 7.81,-3.29 10.44,-12.47 10.89,-20.21 0.3,-15.68 0.05,-31.36 0.18,-47.04 -0.15,-3.96 1.92,-8.39 6.02,-9.43 3.75,-0.45 8.16,-0.91 11.27,1.7 2.27,1.84 3.02,4.93 3.08,7.73 0.11,13.67 -0.06,27.35 0.01,41.02 C 92,76 90.8,86.27 86.53,95.43 83.2,102.94 77.52,109.61 70.07,113.25 59.92,118.71 46.89,118.02 37.28,111.7 24.6,103.83 19.14,88.28 18.65,73.98 18.42,57.66 18.52,41.32 18.52,25 c -0.16,-3.96 1.85,-8.3 5.91,-9.4 z"
id="path2"/>
<path
d="m 202.43,15.58 c 3.72,-0.43 8.21,-1.09 11.23,1.69 2.54,2.08 2.92,5.61 2.95,8.67 0.1,15.02 -0.06,30.05 0.12,45.06 0.34,7.21 2.27,15.38 8.52,19.77 3.47,2.75 8.26,2.2 12.36,1.66 8.28,-2.91 11.41,-12.38 11.62,-20.41 0.38,-15.98 -0.08,-31.97 0.25,-47.95 0.01,-4.12 2.95,-8.86 7.48,-8.73 3.24,0 7.21,-0.74 9.66,1.95 2.4,2.17 3.09,5.54 3.05,8.65 -0.01,15.04 0.04,30.08 -0.01,45.12 -0.2,12.46 -3.28,25.39 -11.64,34.98 -6.65,7.04 -16.34,11.31 -26.08,10.76 -10.56,0.14 -20.11,-6.23 -26.32,-14.39 -6.13,-9.22 -9.3,-20.3 -9.28,-31.36 0.04,-15.36 -0.17,-30.72 0.01,-46.08 -0.2,-4.01 2.06,-8.26 6.08,-9.39 z"
id="path3"/>
<path
d="m 101.32,53.29 c 3.81,-3.66 12.24,-5.16 14.7,0.69 4.07,9.49 6.61,19.57 10.09,29.27 2.77,-5.69 3.87,-12.02 6.11,-17.93 1.72,-4.58 2.22,-10.5 6.78,-13.28 4.84,-3.16 12.17,-0.5 14,4.93 3.2,8.6 5.74,17.44 8.48,26.2 2.61,-4.44 3.38,-9.68 5.28,-14.44 1.95,-5.09 3.27,-10.43 5.66,-15.35 2.91,-5.15 10.56,-3.55 14.27,-0.12 3.95,3.15 3.14,8.78 1.53,12.95 -5.04,14.19 -9.93,28.44 -15.62,42.38 -1.15,2.88 -2.9,5.76 -5.78,7.16 -4.23,1.89 -9.94,1.16 -12.64,-2.92 -3.93,-5.84 -5.37,-12.86 -7.59,-19.44 -0.95,-2.42 -1.01,-5.3 -2.75,-7.34 -1.36,5.08 -3.19,10.01 -4.7,15.04 -1.35,4.11 -2.53,8.42 -5.15,11.94 -4.08,5.84 -14.36,4.58 -17.07,-1.98 C 110.5,96.67 105.49,81.69 100.18,66.87 98.61,62.56 97.13,56.65 101.32,53.29 Z"
id="path4"/>
</g>
<path
d="m 912.79574,697.97157 c 29.20263,-1.04162 58.03324,10.23022 80.68853,28.30981 16.18233,12.94588 26.71023,34.22473 22.91573,55.16878 -3.9433,20.01403 -18.34003,36.56838 -35.4152,47.059 -24.51532,16.29395 -55.35478,17.26117 -83.81339,15.95915 -31.95548,-1.52524 -64.58058,-16.81476 -81.13493,-45.08737 -11.97866,-18.6004 -8.22138,-43.78533 4.7617,-60.8605 20.68364,-28.79341 58.21924,-39.02363 91.99756,-40.54887 z"
id="path7"
style="opacity:0.4" />
<path
d="m 77.395982,704.44742 c 33.555118,-7.62616 70.793108,-3.01326 100.330548,15.14073 19.15841,12.57387 36.64278,32.8111 35.82436,57.02882 -0.52081,23.02729 -17.37277,41.92529 -35.74996,53.94115 -25.37094,17.18677 -57.54963,18.33999 -87.124264,16.40555 C 63.25968,845.14083 36.884316,832.26936 18.693127,811.66012 1.3203566,792.42731 1.059951,760.47182 17.465501,740.5694 32.457422,721.9318 54.629095,710.58556 77.395982,704.44742 Z"
id="path8"
style="opacity:0.4" />
</svg>

After

Width:  |  Height:  |  Size: 3.2 KiB

+6
View File
@@ -0,0 +1,6 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1024 1024" fill="currentColor">
<path
d="m 547.52918,728.17397 a 117.70956,117.70956 0 0 1 -158.96317,49.41452 117.70956,117.70956 0 0 1 -49.4145,-158.96317 l 38.34203,-72.93218 a 35.312869,35.312869 0 0 1 47.68894,-14.82435 35.312869,35.312869 0 0 1 14.82435,47.68895 l -38.34203,72.93218 a 47.083825,47.083825 0 0 0 19.76581,63.58526 47.083825,47.083825 0 0 0 63.58526,-19.7658 L 564.11,544.8607 c -30.12298,-30.73062 -40.16538,-75.37364 -21.10391,-111.63135 24.10071,-45.84309 85.495,-61.44135 137.58942,-34.05419 52.09442,27.38717 74.05118,86.80488 49.95049,132.64797 -19.06147,36.25772 -61.53026,53.29447 -103.92269,45.90217 L 547.52918,728.17397 M 430.54228,267.71678 c 52.09443,27.38716 74.0512,86.80487 49.9505,132.64796 -19.06146,36.25773 -61.53024,53.29449 -103.92269,45.90217 L 259.13393,669.64779 a 153.02244,153.02244 0 0 0 64.23886,206.65211 153.02244,153.02244 0 0 0 206.65212,-64.23886 l 76.68406,-145.86438 a 35.312869,35.312869 0 0 1 47.68896,-14.82435 35.312869,35.312869 0 0 1 14.82435,47.68894 L 592.53822,844.92563 A 223.64817,223.64817 0 0 1 290.5082,938.8132 223.64817,223.64817 0 0 1 196.62063,636.78318 L 314.05679,413.40232 c -30.123,-30.73062 -40.16538,-75.37365 -21.1039,-111.63137 24.10069,-45.84308 85.49499,-61.44133 137.58939,-34.05417 M 546.9462,229.44013 497.03752,280.86525 C 484.77069,262.71363 467.81236,247.415 446.97459,236.46013 409.04985,216.52227 366.52877,215.44561 332.10697,230.32957 l -30.29188,-63.79966 c 43.78337,-19.5373 95.86368,-22.47811 145.45286,-6.51485 l 1.31458,-2.50054 A 176.56434,176.56434 0 0 1 687.02728,83.392755 176.56434,176.56434 0 0 1 761.14905,321.83751 l -1.31458,2.50053 c 41.26348,31.79996 68.3667,76.36925 77.0945,123.51282 l -69.72941,11.21631 c -7.25373,-36.7937 -32.24703,-71.2108 -70.17175,-91.14866 -20.83778,-10.95486 -43.05444,-16.25137 -64.96156,-16.06574 l 14.06773,-70.26746 c 16.60118,1.81238 34.45265,4.28207 51.18718,9.88813 l 1.31458,-2.50052 C 726.02292,236.8785 706.25712,173.29323 654.16269,145.90606 602.06827,118.5189 538.483,138.28471 511.09584,190.37912 l -1.31459,2.50053 c 14.10537,10.60714 26.2603,23.91245 37.16495,36.56048 m 106.26215,221.82945 c -22.92156,-12.05034 -49.12485,-7.74005 -58.10784,9.34693 -8.98298,17.08697 2.32168,41.11602 25.24324,53.16638 22.92154,12.05035 49.12485,7.74005 58.10783,-9.34692 8.98299,-17.08698 -2.3217,-41.11603 -25.24323,-53.16639 M 403.15512,319.8112 c -22.92154,-12.05035 -49.12484,-7.74005 -58.10783,9.34691 -8.98298,17.08698 2.32169,41.11604 25.24324,53.16639 22.92155,12.05035 49.12485,7.74006 58.10783,-9.34692 8.98299,-17.08697 -2.32168,-41.11604 -25.24324,-53.16638 z"
id="path1"
style="stroke-width:1.10352" />
</svg>

After

Width:  |  Height:  |  Size: 2.7 KiB

+199
View File
@@ -0,0 +1,199 @@
// GitHub API - Dynamic release info & screenshots
(function () {
'use strict';
var REPO = 'alesimula/Murine-launcher';
var API = 'https://api.github.com/repos/' + REPO;
// --- Markdown to HTML (lightweight) ---
function mdToHtml(md) {
if (!md) return '';
var html = md
// code blocks
.replace(/```(\w*)\n([\s\S]*?)```/g, '<pre><code>$2</code></pre>')
// inline code
.replace(/`([^`]+)`/g, '<code>$1</code>')
// headings
.replace(/^### (.+)$/gm, '<h3>$1</h3>')
.replace(/^## (.+)$/gm, '<h2>$1</h2>')
.replace(/^# (.+)$/gm, '<h1>$1</h1>')
// bold + italic
.replace(/\*\*\*(.+?)\*\*\*/g, '<strong><em>$1</em></strong>')
.replace(/\*\*(.+?)\*\*/g, '<strong>$1</strong>')
.replace(/\*(.+?)\*/g, '<em>$1</em>')
// images
.replace(/!\[([^\]]*)\]\(([^)]+)\)/g, '<img alt="$1" src="$2">')
// links
.replace(/\[([^\]]+)\]\(([^)]+)\)/g, '<a href="$2" target="_blank" rel="noopener">$1</a>')
// unordered lists
.replace(/^\s*[-*] (.+)$/gm, '<li>$1</li>')
// blockquote
.replace(/^> (.+)$/gm, '<blockquote>$1</blockquote>')
// horizontal rules
.replace(/^---+$/gm, '<hr>')
// paragraphs (double newline)
.replace(/\n\n+/g, '</p><p>')
// single newlines to <br>
.replace(/\n/g, '<br>');
// wrap consecutive <li> in <ul>
html = html.replace(/((?:<li>.*?<\/li><br>?)+)/g, function (match) {
return '<ul>' + match.replace(/<br>/g, '') + '</ul>';
});
return '<p>' + html + '</p>';
}
function formatBytes(bytes) {
if (!bytes) return '';
var sizes = ['B', 'KB', 'MB', 'GB'];
var i = Math.floor(Math.log(bytes) / Math.log(1024));
return (bytes / Math.pow(1024, i)).toFixed(1) + ' ' + sizes[i];
}
function formatDate(dateStr) {
var d = new Date(dateStr);
return d.toLocaleDateString('en-US', { year: 'numeric', month: 'short', day: 'numeric' });
}
// --- Latest Release ---
function loadLatestRelease() {
var container = document.getElementById('latestRelease');
if (!container) return;
fetch(API + '/releases/latest')
.then(function (res) {
if (!res.ok) throw new Error('HTTP ' + res.status);
return res.json();
})
.then(function (release) {
renderRelease(release, container);
// Update hero version
var badge = document.getElementById('versionBadge');
if (badge) badge.textContent = release.tag_name;
var heroDesc = document.getElementById('releaseDate');
if (heroDesc) heroDesc.textContent = 'Released ' + formatDate(release.published_at);
})
.catch(function (err) {
console.error('Failed to load release:', err);
container.innerHTML =
'<div class="error-state">' +
'<span class="material-symbols-outlined">cloud_off</span>' +
'<p>Could not load release info.</p>' +
'<p style="font-size:0.8125rem">Check the <a href="https://github.com/' + REPO + '/releases" target="_blank">releases page</a> directly.</p>' +
'</div>';
});
}
function renderRelease(release, container) {
var apkAssets = release.assets.filter(function (a) {
return a.name.endsWith('.apk');
});
var otherAssets = release.assets.filter(function (a) {
return !a.name.endsWith('.apk');
});
var assetsHtml = '';
if (apkAssets.length > 0 || otherAssets.length > 0) {
assetsHtml = '<div class="release-assets"><h3>Assets</h3><div class="asset-list">';
apkAssets.forEach(function (asset) {
assetsHtml +=
'<a href="' + asset.browser_download_url + '" class="asset-item">' +
'<div class="asset-info"><span class="material-symbols-outlined">android</span>' +
'<span class="asset-name">' + asset.name + '</span></div>' +
'<span class="asset-size">' + formatBytes(asset.size) + '</span></a>';
});
otherAssets.forEach(function (asset) {
assetsHtml +=
'<a href="' + asset.browser_download_url + '" class="asset-item">' +
'<div class="asset-info"><span class="material-symbols-outlined">description</span>' +
'<span class="asset-name">' + asset.name + '</span></div>' +
'<span class="asset-size">' + formatBytes(asset.size) + '</span></a>';
});
assetsHtml += '</div></div>';
}
container.innerHTML =
'<div class="release-card">' +
'<div class="release-card-header">' +
'<h2><span class="material-symbols-outlined">new_releases</span>' + (release.name || release.tag_name) + '</h2>' +
'<div class="release-meta">' +
'<span><span class="material-symbols-outlined">calendar_today</span>' + formatDate(release.published_at) + '</span>' +
'<span><span class="material-symbols-outlined">sell</span>' + release.tag_name + '</span>' +
'</div></div>' +
'<div class="release-body"><div class="release-notes">' + mdToHtml(release.body) + '</div></div>' +
assetsHtml +
'<div class="release-footer">' +
'<a href="https://github.com/' + REPO + '/releases" class="btn-text" target="_blank" rel="noopener">' +
'<span class="material-symbols-outlined">history</span>View all releases</a>' +
'</div></div>';
// Also update download button href
if (apkAssets.length > 0) {
var dlBtn = document.getElementById('downloadBtn');
if (dlBtn) dlBtn.href = apkAssets[0].browser_download_url;
}
}
// --- Screenshots ---
function loadScreenshots() {
var container = document.getElementById('screenshotGallery');
if (!container) return;
// Fetch directory listing from GitHub API
fetch(API + '/contents/fastlane/metadata/android/en-US/images/phoneScreenshots')
.then(function (res) {
if (!res.ok) throw new Error('HTTP ' + res.status);
return res.json();
})
.then(function (files) {
// Filter to image files and sort
var images = files
.filter(function (f) {
return /\.(png|jpg|jpeg|webp)$/i.test(f.name);
})
.sort(function (a, b) {
return a.name.localeCompare(b.name, undefined, { numeric: true });
});
if (images.length === 0) {
container.innerHTML = '<div class="error-state"><p>No screenshots found.</p></div>';
return;
}
var html = '<div class="screenshot-scroll">';
images.forEach(function (img) {
var rawUrl = 'https://raw.githubusercontent.com/' + REPO + '/main/fastlane/metadata/android/en-US/images/phoneScreenshots/' + img.name;
html +=
'<div class="screenshot-item">' +
'<img src="' + rawUrl + '" alt="Screenshot ' + img.name + '" loading="lazy">' +
'</div>';
});
html += '</div>';
container.innerHTML = html;
})
.catch(function (err) {
console.error('Failed to load screenshots:', err);
// Fallback: use known screenshot names
var html = '<div class="screenshot-scroll">';
for (var i = 1; i <= 7; i++) {
var rawUrl = 'https://raw.githubusercontent.com/' + REPO + '/main/fastlane/metadata/android/en-US/images/phoneScreenshots/' + i + '.png';
html +=
'<div class="screenshot-item">' +
'<img src="' + rawUrl + '" alt="Screenshot ' + i + '" loading="lazy">' +
'</div>';
}
html += '</div>';
container.innerHTML = html;
});
}
// --- Init ---
document.addEventListener('DOMContentLoaded', function () {
loadLatestRelease();
loadScreenshots();
});
})();
+47
View File
@@ -0,0 +1,47 @@
// Material Expressive - Theme Toggle & Nav Scroll
(function () {
'use strict';
// --- Theme ---
const STORAGE_KEY = 'murine-theme';
function getPreferred() {
const stored = localStorage.getItem(STORAGE_KEY);
if (stored) return stored;
return window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light';
}
function applyTheme(theme) {
document.documentElement.setAttribute('data-theme', theme);
const icon = document.getElementById('themeIcon');
if (icon) icon.textContent = theme === 'dark' ? 'light_mode' : 'dark_mode';
}
applyTheme(getPreferred());
document.addEventListener('DOMContentLoaded', function () {
applyTheme(getPreferred());
var toggle = document.getElementById('themeToggle');
if (toggle) {
toggle.addEventListener('click', function () {
var current = document.documentElement.getAttribute('data-theme') || 'light';
var next = current === 'dark' ? 'light' : 'dark';
localStorage.setItem(STORAGE_KEY, next);
applyTheme(next);
});
}
// --- Nav scroll shadow ---
var nav = document.getElementById('topNav');
if (nav) {
window.addEventListener('scroll', function () {
if (window.scrollY > 8) {
nav.classList.add('scrolled');
} else {
nav.classList.remove('scrolled');
}
}, { passive: true });
}
});
})();
+38
View File
@@ -0,0 +1,38 @@
---
layout: default
title: Download
---
<!-- Download Hero -->
<section class="download-hero">
<img src="https://raw.githubusercontent.com/alesimula/Murine-launcher/refs/heads/main/image/app_icon/icon_browser_fullsize.svg" alt="Murine Launcher" class="app-icon">
<h1>Murine Launcher</h1>
<div class="version-badge" id="versionBadge">Loading…</div>
<p class="download-desc" id="releaseDate">Checking for latest release…</p>
<div class="download-actions">
<a href="https://github.com/alesimula/Murine-launcher/releases/latest" id="downloadBtn" class="btn-filled" target="_blank" rel="noopener">
<span class="material-symbols-outlined">download</span>
Download APK
</a>
<a href="https://github.com/alesimula/Murine-launcher/releases" class="btn-outlined" target="_blank" rel="noopener">
<span class="material-symbols-outlined">history</span>
All Releases
</a>
</div>
</section>
<!-- Latest Release Details -->
<section class="release-section" id="latestRelease">
<div class="release-card">
<div class="release-card-header">
<div class="skeleton skeleton-title"></div>
</div>
<div class="release-body">
<div class="skeleton skeleton-text w80"></div>
<div class="skeleton skeleton-text w60"></div>
<div class="skeleton skeleton-text w80"></div>
<div class="skeleton skeleton-text w40"></div>
<div class="skeleton skeleton-block" style="margin-top:16px"></div>
</div>
</div>
</section>
+114
View File
@@ -0,0 +1,114 @@
---
layout: default
title: Home
---
<!-- Hero -->
<section class="hero">
<div class="hero-inner">
<div class="hero-text">
<h1>Android launcher,<br><span class="accent">plain and simple.</span></h1>
<p class="hero-desc">
A modern, lightweight FOSS Launcher3 fork delivering an enhanced stock Android experience,
providing a familiar AOSP feel out of the box, with some sprinkles on top :3 <br/><br/>
Offers a minimalistic yet polished interface with essential customization options, with zero bloat.
</p>
<div class="hero-actions">
<a href="{{ '/download' | relative_url }}" class="btn-filled">
<span class="material-symbols-outlined">download</span>
Download
</a>
<a href="https://github.com/alesimula/Murine-launcher" class="btn-outlined" target="_blank" rel="noopener">
<span class="material-symbols-outlined">code</span>
Source Code
</a>
</div>
</div>
<div class="hero-visual">
<div class="hero-icon-wrapper">
<img src="https://raw.githubusercontent.com/alesimula/Murine-launcher/refs/heads/main/image/app_icon/icon_browser_fullsize.svg" alt="Murine Launcher icon">
</div>
</div>
</div>
</section>
<!-- Features -->
<section class="features-section">
<div class="section-header">
<h2>What it has to offer</h2>
<p>Built on AOSP Launcher3, Murine keeps things clean while adding a little touches here and there.</p>
</div>
<div class="features-grid">
<div class="feature-card">
<div class="feature-icon">
<span class="material-symbols-outlined">palette</span>
</div>
<h3>Modern UI</h3>
<p>Built on the foundations of modern Launcher3, and enhanced with AOSP Material Expressive settings ported from LineageOS</p>
</div>
<div class="feature-card">
<div class="feature-icon">
<span class="material-symbols-outlined">blur_on</span>
</div>
<h3>Blur Effects</h3>
<p>Frosted glass and MICA-style translucency effects on the app drawer and search bar. Supported on Android 12+ with compatible OEM/ROMs.</p>
</div>
<div class="feature-card">
<div class="feature-icon">
<span class="material-symbols-outlined">search</span>
</div>
<h3>Customised QuickSearchBox</h3>
<p>Can look great without needing Google; disable the Lens button, choose your preferred search engine, or disable it alltogether if it's not your thing.</p>
</div>
<div class="feature-card">
<div class="feature-icon">
<span class="material-symbols-outlined">speed</span>
</div>
<h3>Lightweight</h3>
<p>Very close to its AOSP source, with some enhancements but no bloat. Very tiny, very light, very demure.</p>
</div>
<div class="feature-card">
<div class="feature-icon">
<span class="custom-icon" style="--icon-url: url('{{ '/assets/img/ic_bestfeature.svg' | relative_url }}')"></span>
</div>
<h3>Designed by a mouse</h3>
<p>Are you tired of apps designed by humans? This one was built by a mouse, no (excessive) desire for money, will not sell out or sell you out, mice only deal in cheese and crumbs.</p>
</div>
<div class="feature-card">
<div class="feature-icon">
<span class="custom-icon" style="--icon-url: url('{{ '/assets/img/ic_clippy.svg' | relative_url }}')"></span>
</div>
<h3>Free &amp; Open Source</h3>
<p>Fully open source, licensed under the Apache 2.0 license. No tracking, no ads, no data collection, no internet access.</p>
</div>
</div>
</section>
<!-- Screenshots -->
<section class="screenshots-section">
<div class="section-header">
<h2>See how it looks</h2>
<p>Screenshots from the latest release. Scroll to explore.</p>
</div>
<div id="screenshotGallery">
<div class="screenshot-loading">
<span class="material-symbols-outlined">hourglass_top</span>
Loading screenshots&hellip;
</div>
</div>
</section>
<!-- Compatibility -->
<section class="compat-section">
<div class="compat-card">
<div class="compat-icon">
<span class="material-symbols-outlined">smartphone</span>
</div>
<div class="compat-details">
<h3>Compatibility</h3>
<p>Murine Launcher supports <strong>Android 8 (Oreo)</strong> and above.</p>
<p>Blur effects require <strong>Android 12+</strong>. Some OEMs or ROMs may hide or disable window-level blurs - check for an "Allow window-level blurs" option in Display or Developer Options.</p>
<p>On rooted devices, you can try enabling the <a href="https://github.com/Magisk-Modules-Alt-Repo/enable-blurs" target="_blank" rel="noopener">enable-blurs Magisk module</a>.</p>
</div>
</div>
</section>