AstraOS Ver. 1.53.2 - Desktop Client Installer Page hinzugefügt
All checks were successful
Deploy AstraOS Panel / deploy (push) Successful in 28s

This commit is contained in:
MrWhiff 2026-08-30 19:43:24 +02:00
parent 849fe44440
commit 60f8a0a4b9
4 changed files with 97 additions and 0 deletions

View file

@ -0,0 +1,84 @@
{% extends "sidebar.html" %}
{% block title %}AstraOS — Desktop App{% endblock %}
{% block head %}
<style>
.glow-card {
transition: 0.2s ease;
}
.glow-card:hover {
box-shadow: 0 0 20px rgba(192,132,252,0.3);
transform: translateY(-4px);
}
.btn-primary {
background: linear-gradient(135deg, #a855f7 0%, #9333ea 100%);
color: white;
box-shadow: 0 4px 15px rgba(168, 85, 247, 0.4);
transition: all 0.2s ease;
}
.btn-primary:hover {
box-shadow: 0 6px 20px rgba(168, 85, 247, 0.6);
transform: translateY(-2px);
}
.platform-icon {
width: 24px;
height: 24px;
fill: currentColor;
}
</style>
<script src="https://cdnjs.cloudflare.com/ajax/libs/gsap/3.12.2/gsap.min.js"></script>
{% endblock %}
{% block content %}
<header class="flex justify-between items-center mb-6 opacity-0" id="header-anim">
<div>
<h2 class="text-4xl font-bold tracking-wide text-purple-300">Desktop App</h2>
<p class="text-slate-400 mt-2">Lade den offiziellen AstraOS Client für dein Betriebssystem herunter.</p>
</div>
</header>
<div class="grid grid-cols-1 md:grid-cols-2 gap-8" id="cards-anim">
<!-- Windows Download -->
<div class="glow-card opacity-0 translate-y-8 bg-black/40 border border-purple-500/20 p-8 rounded-xl backdrop-blur flex flex-col items-center text-center">
<div class="w-16 h-16 bg-blue-500/10 text-blue-400 rounded-2xl flex items-center justify-center mb-6 border border-blue-500/20">
<svg class="w-8 h-8" viewBox="0 0 24 24" fill="currentColor">
<path d="M0 3.449L9.75 2.1v9.451H0m10.949-9.602L24 0v11.4H10.949M0 12.6h9.75v9.451L0 20.699M10.949 12.6H24V24l-12.9-1.801"/>
</svg>
</div>
<h3 class="text-2xl font-bold text-slate-100 mb-2">Windows</h3>
<p class="text-slate-400 text-sm mb-8">Optimiert für Windows 10 & 11. Bietet natives Fenstermanagement und nahtlose Integration.</p>
<a href="/static/downloads/AstraOS%20Setup%201.53.2.exe" class="btn-primary w-full py-3 rounded-lg font-semibold flex items-center justify-center gap-2">
<svg class="w-5 h-5" fill="none" stroke="currentColor" viewBox="0 0 24 24"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M4 16v1a3 3 0 003 3h10a3 3 0 003-3v-1m-4-4l-4 4m0 0l-4-4m4 4V4"></path></svg>
Download für Windows
</a>
<p class="text-xs text-slate-500 mt-4">Version 1.53.2 (64-bit)</p>
</div>
<!-- macOS Download (Coming soon) -->
<div class="glow-card opacity-0 translate-y-8 bg-black/40 border border-slate-800 p-8 rounded-xl backdrop-blur flex flex-col items-center text-center relative overflow-hidden">
<div class="absolute inset-0 bg-black/60 z-10 flex flex-col items-center justify-center backdrop-blur-sm">
<span class="bg-purple-600/80 text-white text-xs font-bold px-3 py-1 rounded-full border border-purple-500/50 mb-2">In Entwicklung</span>
<p class="text-slate-300 font-medium">Bald verfügbar</p>
</div>
<div class="w-16 h-16 bg-slate-100/10 text-slate-300 rounded-2xl flex items-center justify-center mb-6 border border-slate-700">
<svg class="w-8 h-8" viewBox="0 0 24 24" fill="currentColor">
<path d="M12 20.83c-5.28 0-8.91-4.22-8.91-9.5S6.72 1.83 12 1.83c2.44 0 4.6 1 6.13 2.62l-2 2a6 6 0 00-4.13-1.6c-3.64 0-6.1 2.87-6.1 6.48s2.46 6.48 6.1 6.48a6.34 6.34 0 005.62-3.4h-5.62v-2.83h8.55a9.38 9.38 0 01.12 1.7 9 9 0 01-9.67 8.05z"/>
</svg>
</div>
<h3 class="text-2xl font-bold text-slate-100 mb-2">macOS</h3>
<p class="text-slate-400 text-sm mb-8">Nativer Apple Silicon & Intel Support. Bringt AstraOS perfekt auf den Mac.</p>
<button disabled class="w-full py-3 rounded-lg font-semibold bg-slate-800 text-slate-500 cursor-not-allowed">
Download für macOS
</button>
</div>
</div>
<script>
document.addEventListener('DOMContentLoaded', () => {
gsap.to("#header-anim", { opacity: 1, y: 0, duration: 0.6, ease: "power3.out" });
gsap.to(".glow-card", { opacity: 1, y: 0, duration: 0.6, ease: "power3.out", stagger: 0.1, delay: 0.1 });
});
</script>
{% endblock %}

View file

@ -186,6 +186,13 @@
Status Page Status Page
</a> </a>
<a href="{{ url_for('installer') }}"
class="px-3 py-2 rounded-md transition flex-shrink-0
{% if active_page == 'installer' %}{% if maintenance_active %}bg-yellow-500/10 text-yellow-300{% else %}bg-purple-500/10 text-purple-300{% endif %}{% else %}
{% if maintenance_active %}hover:bg-yellow-500/10 hover:text-yellow-300{% else %}hover:bg-purple-500/10 hover:text-purple-300{% endif %}{% endif %}">
Desktop App
</a>
<a href="{{ url_for('settings') }}" <a href="{{ url_for('settings') }}"
class="px-3 py-2 rounded-md transition flex-shrink-0 class="px-3 py-2 rounded-md transition flex-shrink-0
{% if active_page == 'settings' %}{% if maintenance_active %}bg-yellow-500/10 text-yellow-300{% else %}bg-purple-500/10 text-purple-300{% endif %}{% else %} {% if active_page == 'settings' %}{% if maintenance_active %}bg-yellow-500/10 text-yellow-300{% else %}bg-purple-500/10 text-purple-300{% endif %}{% else %}

View file

@ -678,6 +678,12 @@ def home():
if 'user_id' in session: if 'user_id' in session:
return redirect(url_for('dashboard')) return redirect(url_for('dashboard'))
return redirect(url_for('login')) return redirect(url_for('login'))
@app.route('/installer')
@login_required
def installer():
user = accounts_collection.find_one({"_id": ObjectId(session['user_id'])}) if 'user_id' in session else None
return render_template('installer.html', user=user, active_page='installer')
@app.route('/login', methods=['GET', 'POST']) @app.route('/login', methods=['GET', 'POST'])
def login(): def login():
if 'user_id' in session: if 'user_id' in session: