AssetHub Dokumentation

Häufig gestellte Fragen

Kann ich AssetHub auf dem günstigsten Hostinger Single-Tarif betreiben?

Ja — AssetHub ist vollständig kompatibel mit Hostinger Single (~$2,99/Monat). Single enthält PHP 8.3, MySQL, native Cron Jobs und kostenloses SSL — alles, was AssetHub benötigt. Kein SSH, kein Composer, keine Kommandozeile. Siehe Abschnitt Hostinger-Einrichtung für die Schritt-für-Schritt-Anleitung.

Brauche ich technische Kenntnisse für die Installation?

Nein. Der Web-Installer erledigt alles: Anforderungsprüfung, Datenbank-Setup, Migrationen und Erstellung des Admin-Kontos. Einfach Dateien hochladen, /install im Browser aufrufen und dem Assistenten folgen.

Wie funktionieren geplante E-Mails (Garantie-/Wartungs-Benachrichtigungen)?

AssetHub verwendet Laravels Scheduler. Sie konfigurieren nur einen Cron-Job, der jede Minute läuft, und Laravel verteilt intern jede Aufgabe zum richtigen Zeitpunkt (täglich 08:00, monatlich usw.). Für cPanel richten Sie es unter Advanced → Cron Jobs ein. Für Hostinger verwenden Sie hPanel → Advanced → Cron Jobs. Siehe cPanel-Einrichtung → Schritt 7 oder Hostinger-Einrichtung → Schritt 5. Falls Ihr Hoster kein Cron hat, verwenden Sie die In-App-Cron-URL mit dem kostenlosen Dienst cron-job.org.

Welche Abschreibungsmethoden werden unterstützt?

Drei Methoden: Linear (gleichmäßige jährliche Abschreibung), Degressiv (beschleunigt, häufig für Steuerzwecke) und Leistungsabschreibung (nutzungsbasiert, für Fertigungsausrüstung). Asset-Werte werden automatisch am 1. jedes Monats aktualisiert.

Funktioniert der QR-Scanner auf Handys?

Ja — es verwendet die Browser-Kamera über html5-qrcode und funktioniert in jedem modernen Handy-/Tablet-/Desktop-Browser. Die einzige Voraussetzung ist HTTPS. cPanel AutoSSL und Hostinger Let's Encrypt SSL funktionieren sofort.

Kann ich eigene Felder ohne Programmierung hinzufügen?

Ja. Admin → Benutzerdefinierte Felder erlaubt unbegrenzt Attribute (Text, Zahl, Datum, Auswahl, Textbereich, Datei, Checkbox), Eingrenzung auf bestimmte Kategorien, Pflichtmarkierung und Umsortierung per Drag-and-drop — alles über die UI.

Wie viele Sprachen unterstützt AssetHub?

11 Locales out of the box: Englisch, Vietnamesisch, Spanisch, Französisch, Deutsch, Chinesisch, Japanisch, Portugiesisch (BR), Russisch, Arabisch (mit voller RTL-Unterstützung) und Hindi (हिन्दी). Admins verwalten Übersetzungen unter Administration → Translations (erfordert die Berechtigung manage translations).

Kann ich AssetHub auf cPanel-Shared-Hosting installieren?

Ja — AssetHub läuft auf jedem Standard-cPanel-Shared-Hosting-Tarif mit PHP 8.2+, MySQL und Cron Jobs. Kein Composer oder Node.js auf dem Server erforderlich — das Paket wird vorkompiliert geliefert. Viele cPanel-Hoster bieten kein Web-Terminal; das ist kein Problem. Siehe den Abschnitt cPanel-Einrichtung für die vollständige Schritt-für-Schritt-Anleitung (einschließlich der Generierung von APP_KEY ohne Terminal).

Wie rebrande ich AssetHub (Login-Seite, Seitentitel & Farben)?

AssetHub kann vollständig über das Admin-Panel rebrandet werden — ohne Codeänderungen oder npm run build. Seit v3.1.0 folgen Login-Logo, Footer und Badge Settings → Branding → App Name. v4.0 ergänzt den Browser-Seitentitel zur Laufzeit und den Tab Appearance für app-weite Farben in Hell- und Dunkelmodus.

Vollständige Rebrand-Checkliste: App Name aktualisieren (Logo, Login, Seitentitel) → auth.login_subtitle pro Sprache bearbeiten → Farben unter Settings → Appearance anpassen.

Kurzreferenz:

ElementBeispielÄndern über
Top-left logo & wordmarkVimoticFARSettings → Branding → App Name
Login subtitleEnter your credentials to access AssetHubAdministration → Translationsauth.login_subtitle
Footer copyright© 2026 VimoticFARSettings → Branding → App Name
Right panel badgeVIMOTICFARSettings → Branding → App Name
Browser page title (tab)YourAppNameSettings → Branding → App Name (v4.0+)
App colors (buttons, sidebar, badges…)Custom green / blue paletteSettings → Appearance (v4.0+)

1. Logo and wordmark:

  1. Sign in as an administrator.
  2. Go to Settings → Branding.
  3. Update App Name (and optionally upload a logo).
  4. Save.

This name appears on the login page (logo, footer, badge), in the sidebar, and — since v4.0 — in the browser tab title on every page.

2. Browser page title (v4.0):

The text shown in the browser tab follows Settings → Branding → App Name at runtime. Change App Name, save, and refresh — no .env edit or rebuild needed. The title updates on the login screen and after sign-in.

3. Login subtitle: the line below the main heading uses the translation key auth.login_subtitle (not App Name).

  • In the app (recommended): Administration → Translations → select language → group auth → key login_subtitle → replace AssetHub with your app name → Save. Repeat for each language.
  • In code: edit lang/{locale}/auth.php — e.g. 'login_subtitle' => 'Enter your credentials to access YourAppName',

4. Footer and right-panel badge: since v3.1.0, the footer (© {year} …) and the uppercase badge on the right column use the same App Name as the logo. Change it once under Settings → Branding and refresh the login page.

5. App colors — Appearance (v4.0):

The Appearance tab lets you change the color scheme for the entire application — buttons, sidebar highlights, badges, links, and themed text — separately for light and dark mode. Colors are saved to the database.

  • Open: Sidebar → SettingsAppearance (requires manage settings permission).
  • Color groups: Brand & Accent (primary UI), Success / Warning / Danger / Info (status badges), Primary / Secondary / Muted / Link (text).
  • Light & dark: use the Editing: Light / Dark toggle — configure both if your team uses dark mode. Live Preview on the right.
  • Save: click Save appearance to apply app-wide. Reset to defaults restores AssetHub's built-in palette (save afterward to persist).

Branding vs Appearance: Branding = app name, logo, page title. Appearance = colors only. For a complete visual rebrand, update both tabs.

Notes:

  • Changing App Name does not update translation strings — edit auth.login_subtitle (and other auth.* keys) per language.
  • Translation overrides in Administration → Translations are stored in the database and survive app updates.
  • The login page right column (headline, features) uses other auth.* keys — edit them under the same auth group if needed.
  • If colors do not update after saving Appearance, hard-refresh (Ctrl+F5) and confirm you are editing the correct light/dark palette.
  • After upgrading from an older package, upload the full current source/ files (including pre-built public/build/) if branding features are missing.

Übersicht

AssetHub ist ein vollständiges Asset-Management-System auf Basis von Laravel 11, Vue 3 und Tailwind CSS. Version 3.0 ergänzt einen vollständigen Translation Editor, benutzerdefinierte Locales, CSV-Import/-Export und wirksame Zeitzone-/Währungslokalisierung — zusätzlich zu v2 Batch-/Lot-Tracking, Zuweisungen, Disposals und öffentlichen QR-Übergabeseiten.

QR-Code-Verfolgung

Automatische QR-Code-Generierung für jedes Asset. Mit jeder Browser-Kamera scannen.

Abschreibung

3 Methoden: linear, degressiv, leistungsbasiert.

Benutzerdefinierte Felder

Unbegrenzte Attribute hinzufügen — Text, Datum, Auswahl, Datei, Checkbox.

HTTP-Hooks

15 Event-Typen mit HMAC-Signierung und Auto-Retry.

Audit-Log

Jede Änderung protokolliert mit vollständigem Diff-Viewer.

Berichte

12 Berichte mit Diagrammen, Excel- und PDF-Export.

Server-Anforderungen

  • PHP 8.2 oder höher
  • MySQL 5.7+ oder MariaDB 10.3+
  • Composer 2.x
  • Node.js 18+ und npm 9+
  • Webserver: Apache oder Nginx

Erforderliche PHP-Erweiterungen

  • OpenSSL, PDO, PDO_MySQL, Mbstring, Tokenizer, XML, Ctype, JSON, GD, Fileinfo

Speicherplatz

Mindestens ~ 200 MB. Zusätzlicher Platz für Asset-Fotos und Dokumentanhänge einplanen.

Einrichtung

Option A — Web-Installer (Empfohlen)

  1. Projektdateien auf den Webserver hochladen.
  2. Document Root der Domain auf public/ verweisen.
  3. Berechtigungen setzen: storage/ und bootstrap/cache/ müssen schreibbar sein (chmod 775).
  4. Kopieren Sie .env.example nach .env und setzen Sie APP_KEY (führen Sie php artisan key:generate aus, wenn Sie SSH/Terminal haben, oder siehe cPanel-Einrichtung → Schritt 5 für Dateimanager-Alternativen).
  5. https://yourdomain.com/install im Browser aufrufen.
  6. Dem Assistenten folgen — Requirements → Database → Migrate → Admin Account → Done.

Option B — CLI-Installation

# 1. Abhängigkeiten installieren
composer install --no-dev --optimize-autoloader
npm install
npm run build

# 2. Umgebung konfigurieren
cp .env.example .env
php artisan key:generate

# 3. .env bearbeiten für DB-Zugangsdaten
# DB_HOST, DB_PORT, DB_DATABASE, DB_USERNAME, DB_PASSWORD

# 4. Datenbanktabellen und Seed-Daten erstellen
php artisan migrate --seed

# 5. Storage-Symlink für Uploads erstellen
php artisan storage:link

# 6. Config für Produktion cachen
php artisan config:cache
php artisan route:cache
php artisan view:cache

# 7. Als installiert markieren
echo "Installed" > storage/installed.lock
Webserver-Konfiguration: Document Root muss auf das Verzeichnis public/ verweisen. Bei Apache handhabt die mitgelieferte .htaccess das URL-Rewriting. Bei Nginx siehe Laravel-Deployment-Anleitung.

Assistent Schritt 2 — Datenbankkonfiguration

Wenn der Assistent Schritt 2 erreicht, müssen Sie die MySQL-Verbindungsdaten der in Ihrem Hosting-Panel erstellten Datenbank eingeben. Die Datenbank muss bereits existieren (sie kann leer sein — der nächste Assistentenschritt erstellt die Tabellen).

FeldStandard / BeispielHinweise
Host127.0.0.1Funktioniert bei 99 % der Shared Hosts (Hostinger, cPanel, Plesk). Standard beibehalten, es sei denn, Ihr Hosting liefert einen benutzerdefinierten MySQL-Hostnamen (Managed DB wie AWS RDS, DigitalOcean Managed Database).
Port3306Standard-MySQL-Port. Nur ändern, wenn Ihr Anbieter einen abweichenden Port nutzt (selten).
DatenbanknameuXXXXXX_assethubDer vollständige Name in Ihrem Hosting-Panel. Die meisten Shared Hosts prefixen ihn mit Ihrer Benutzer-ID (z. B. Hostinger: u287094729_assethub).
BenutzernameuXXXXXX_assethubMySQL-Benutzer mit Berechtigungen auf der obigen Datenbank. Verwenden Sie nicht root — Shared Hosts erlauben das nicht.
Passwort(Ihr DB-Passwort)Das Passwort, das Sie beim Erstellen des MySQL-Benutzers gesetzt oder kopiert haben. Die meisten Hosts zeigen es nur einmal bei der Erstellung — "View / Reset" verwenden, wenn nicht gespeichert.

Wo Sie diese Zugangsdaten je nach Hosting-Panel finden

  • Hostinger: hPanel → Databases → Management → auf Ihre Datenbank klicken. Die Seite zeigt Name, Benutzername und einen "Show password"-Button.
  • cPanel: cPanel → MySQL Databases. Die Datenbankliste zeigt Namen; Benutzer sind darunter aufgeführt. Bei Bedarf "Change Password" verwenden.
  • Plesk: Plesk → Databases → auf den Datenbanknamen klicken. Die Detailseite zeigt Zugangsdaten und bietet Passwort-Reset.
  • DirectAdmin: DirectAdmin → MySQL Management → auf die Datenbank klicken. Zugangsdaten und Passwort-Reset befinden sich auf der Detailseite.
  • Externe / verwaltete DB: AWS RDS, DigitalOcean Managed Database usw. Verwenden Sie den benutzerdefinierten Hostnamen, Port (oft 3306, aber prüfen), DB-Name, Benutzer und Passwort aus Ihrer Cloud-Konsole. Stellen Sie sicher, dass die Server-IP in der DB-Firewall freigeschaltet ist.

Häufige Fehler und Behebung

FehlermeldungUrsache und Lösung
SQLSTATE[HY000] [1045] Access deniedFalscher Benutzername oder falsches Passwort, oder der Benutzer hat keinen Zugriff auf diese Datenbank. Schreibweise prüfen (einschließlich Benutzerpräfix auf Shared Hosting). Passwort im Hosting-Panel zurücksetzen, wenn unsicher.
SQLSTATE[HY000] [1049] Unknown databaseDer Datenbankname ist falsch, oder Sie haben die Datenbank im Hosting-Panel noch nicht erstellt. Zuerst erstellen, dann den exakten Namen erneut eingeben (einschließlich Präfix).
SQLSTATE[HY000] [2002] Connection refusedDer MySQL-Server ist nicht erreichbar. Host und Port prüfen. Auf Shared Hosting localhost statt 127.0.0.1 versuchen oder umgekehrt. Bei Managed DBs sicherstellen, dass die Server-IP freigeschaltet ist.
SQLSTATE[42S02] Base table not found: sessionsTritt auf, wenn SESSION_DRIVER=database oder CACHE_STORE=database in .env gesetzt ist, bevor die Tabellen existieren. .env bearbeiten und beides auf file setzen, speichern, dann den Assistenten neu laden. Nach der Installation können Sie wieder auf database wechseln.
could not find driverDie PHP-Erweiterung pdo_mysql fehlt oder ist deaktiviert. Aktivieren Sie sie im Hosting-Panel (PHP-Konfiguration → Erweiterungen). Bei cPanel: MultiPHP INI Editor → Erweiterungen oder Select PHP Version → Erweiterungen. Bei Hostinger: hPanel → Advanced → PHP Configuration → Reiter PHP Extensions.
Tipp: Die Felder Host und Port sind mit den häufigsten Werten vorausgefüllt (127.0.0.1 und 3306) — auf Shared Hosting unverändert lassen. Sie müssen nur Datenbankname, Benutzername und Passwort eingeben. Klicken Sie auf Test & Save →, um die Verbindung zu prüfen und zu Schritt 3 zu wechseln.

Localhost (Lokale Entwicklung)

Schnellanleitung, um AssetHub zu Test- oder Entwicklungszwecken auf Ihrem Rechner laufen zu lassen, bevor Sie in die Produktion deployen. Wählen Sie die zu Ihrem Betriebssystem passende Umgebung.

Empfohlen: Laravel Herd ist der schnellste Weg auf macOS und Windows — kein Docker, keine manuelle Apache/MySQL-Konfiguration. XAMPP und Laragon sind gute kostenlose Alternativen, wenn Sie einen traditionellen Stack bevorzugen.

Option 1 — Laravel Herd (Empfohlen, macOS & Windows)

Laravel Herd ist die offizielle lokale Umgebung vom Laravel-Team — kostenlos, nativ, kein Docker. Enthält PHP 8.2/8.3/8.4, Nginx und (in Herd Pro) MySQL/Redis.

  1. Laden Sie Laravel Herd von herd.laravel.com herunter und installieren Sie es.
  2. Legen Sie den AssetHub-Projektordner in ~/Herd/ (macOS) bzw. %USERPROFILE%\Herd\ (Windows). Herd erstellt automatisch eine .test-Domain — z. B. http://assethub.test.
  3. Öffnen Sie Herd → Sites und bestätigen Sie PHP-Version 8.2 oder 8.3. Rechtsklick auf die Site → Secure, um HTTPS zu aktivieren (für QR-Scanner nötig).
  4. Erstellen Sie eine MySQL-Datenbank. Mit Herd Pro nutzen Sie Services → MySQL → Open in TablePlus. Andernfalls installieren Sie MySQL Community oder verwenden SQLite (DB_CONNECTION=sqlite, touch database/database.sqlite).
  5. Kopieren Sie .env.example zu .env, tragen Sie die DB-Zugangsdaten ein und führen Sie php artisan key:generate im Projekt-Root aus.
  6. Öffnen Sie http://assethub.test/install im Browser und folgen Sie dem Installer-Assistenten.

Variante 2 — XAMPP (Windows, macOS, Linux)

XAMPP bündelt Apache, MySQL/MariaDB und PHP. Kostenlos und plattformübergreifend. Achten Sie auf eine Version mit PHP 8.2 oder neuer.

  1. XAMPP 8.2+ von apachefriends.org herunterladen und installieren.
  2. Kopieren Sie das AssetHub-Projekt in C:\xampp\htdocs\AssetHub\ (Windows) bzw. /Applications/XAMPP/htdocs/AssetHub/ (macOS).
  3. Öffnen Sie das XAMPP Control Panel und starten Sie Apache und MySQL. Falls Ports belegt sind, verwenden Sie Config → service.conf, um Apache auf 8080 umzustellen.
  4. Gehen Sie zu http://localhost/phpmyadminNeu → erstellen Sie eine Datenbank assethub mit utf8mb4-Kollation.
  5. Im Projektordner: .env.example zu .env kopieren, DB_DATABASE=assethub setzen, DB_USERNAME=root, DB_PASSWORD leer lassen (XAMPP-Standard). Führen Sie php artisan key:generate aus.
  6. Besuchen Sie http://localhost/AssetHub/public/install, um den Installer-Assistenten zu starten.
Schöne URLs ohne /public/: Erstellen Sie einen virtuellen Host in C:\xampp\apache\conf\extra\httpd-vhosts.conf, der DocumentRoot auf den public/-Ordner des Projekts zeigt, und tragen Sie 127.0.0.1 assethub.local in Ihre hosts-Datei ein.

Variante 3 — Laragon (Windows)

Laragon ist ein portabler Windows-Stack für Laravel — automatische vhosts, schöne URLs, MySQL/MariaDB und integriertes HeidiSQL.

  1. Laragon Full von laragon.org herunterladen und installieren.
  2. In Laragon: Menü → PHP → Version — auf PHP 8.2 oder 8.3 umschalten.
  3. Kopieren Sie das AssetHub-Projekt in C:\laragon\www\AssetHub\.
  4. Start All klicken. Laragon erstellt automatisch den vhost: http://assethub.test (zeigt auf den public/-Ordner).
  5. HeidiSQL (integriert) öffnen → Datenbank assethub erstellen. Standard-Zugangsdaten: Benutzer root, Passwort leer.
  6. .env mit den DB-Zugangsdaten bearbeiten, php artisan key:generate ausführen und dann http://assethub.test/install besuchen.

Option 4 — Eingebauter PHP-Server (kein Webserver nötig)

Die einfachste Option: Laravel liefert artisan serve mit, das einen Entwicklungs-PHP-Server startet. Kein Apache oder Nginx erforderlich. Ideal für schnelle Tests.

# Abhängigkeiten installieren und konfigurieren
cd /path/to/AssetHub
composer install
cp .env.example .env
php artisan key:generate

# Migrationen ausführen und Initialdaten seedern
php artisan migrate --seed

# Entwicklungsserver starten
php artisan serve
# Dann besuchen: http://127.0.0.1:8000/install

Häufige Localhost-Stolperfallen

QR-Scanner öffnet die Kamera nicht über http://

Browser-Kamera-APIs erfordern HTTPS, mit einer Ausnahme: http://localhost und http://127.0.0.1 gelten als sichere Kontexte. Wenn Sie AssetHub über Ihre LAN-IP aufrufen (z. B. http://192.168.1.10), verweigert die Kamera. Nutzen Sie localhost für Entwicklung oder aktivieren Sie HTTPS via Herd / mkcert.

Permission denied auf storage (macOS / Linux)

Bei Schreibfehlern wenn die App loggt oder cacht, Berechtigungen korrigieren: chmod -R 775 storage bootstrap/cache. Auf Windows in der Regel nicht nötig.

Port bereits belegt

Wenn Port 8000 von einer anderen App belegt ist, einen anderen Port verwenden:

php artisan serve --port=8001

E-Mails lokal testen

Echtes SMTP ist auf den meisten Localhost-Setups nicht verfügbar. Zwei sichere Optionen: (1) MAIL_MAILER=log in .env setzen — E-Mails werden in storage/logs/laravel.log geschrieben statt versendet; oder (2) Mailtrap / MailHog verwenden, um ausgehende Mails in einer Fake-Inbox abzufangen.

MAIL_MAILER=log
# Alle E-Mails werden in storage/logs/laravel.log geschrieben

Frontend-Assets (Vite / Tailwind)

Das Vue/Tailwind-Frontend von AssetHub ist im Paket vorgebaut. Wenn Sie Vue-Komponenten oder die Tailwind-Konfig bearbeiten, brauchen Sie Node.js 18+:

npm install
npm run dev    # Hot-Reload während der Entwicklung
npm run build  # Production-Build (vor dem Deployment ausführen)

Deployment auf Hostinger Single (Shared Hosting)

Dies ist der empfohlene Weg für Nutzer ohne VPS oder technische Erfahrung. AssetHub ist vollständig kompatibel mit dem günstigsten Hostinger Single Web Hosting-Tarif (~$2,99/Monat). Kein SSH, kein Composer, keine Kommandozeile — Single enthält native Cron Jobs, PHP 8.3 und kostenloses SSL.

Getestet auf: Hostinger Single-, Premium-, Business-Tarife (PHP 8.2+, MySQL 5.7+, native Cron Jobs in allen Tarifen enthalten).

Schritt 1 — Hosting vorbereiten

  1. Bei Hostinger hPanel anmelden.
  2. Zu Hosting → Verwalten für Ihre Domain gehen.
  3. PHP-Version auf 8.2 oder 8.3 setzen über Erweitert → PHP-Konfiguration.
  4. Sicherstellen, dass diese PHP-Erweiterungen aktiviert sind (üblicherweise Standard):
    • OpenSSL, PDO, PDO_MySQL, Mbstring, GD, Tokenizer, XML, Ctype, JSON, Fileinfo

Schritt 2 — MySQL-Datenbank erstellen

  1. In hPanel zu Datenbanken → MySQL Databases gehen.
  2. Auf Neue Datenbank erstellen klicken.
  3. Diese 3 Werte notieren:
    • Datenbankname — z.B. u123_AssetHub
    • Benutzername — z.B. u123_admin
    • Passwort — automatisch generiert, gut aufbewahren

Schritt 3 — Dateien hochladen

  1. In hPanel zu Dateien → File Manager gehen.
  2. Zu public_html/ navigieren (das ist die Root Ihrer Domain).
  3. Eventuelle Standard-index.html oder default.php in diesem Ordner löschen.
  4. Dateien hochladen klicken und die gesamte source.zip aus dem Paket hochladen.
    Oder bei Bedarf den Inhalt von /source/ direkt per FTP hochladen.
  5. Bei ZIP-Upload Rechtsklick → Entpacken. Nach dem Entpacken müssen alle Dateien im Root von public_html/ liegen.
  6. Sicherstellen, dass public_html/ enthält: app/, public/, vendor/, .htaccess, index.php (in public/), .env, etc.
Wichtig: Sicherstellen, dass die Datei .htaccess im Root von public_html/ existiert. Sie enthält die URL-Rewrite-Regeln. Falls File Manager versteckte Dateien ausblendet, auf Einstellungen → Versteckte Dateien anzeigen klicken.

Schritt 4 — Installer ausführen

  1. Browser öffnen und zu https://yourdomain.com/install navigieren.
  2. Der AssetHub Installer erscheint.
  3. Schritt 1: Requirements — Alle Prüfungen sollten grün sein. Bei Fehlern Hostinger-Support kontaktieren, um fehlende PHP-Erweiterungen zu aktivieren.
  4. Schritt 2: Database — Zugangsdaten aus Schritt 2 oben eingeben:
    • Host: localhost
    • Port: 3306
    • Datenbank: u123_AssetHub
    • Benutzername: u123_admin
    • Passwort: (das von Hostinger generierte)
  5. Schritt 3: Migrate — "Run Migrations & Seed" klicken. Dauert ~10 Sekunden. Nicht refreshen.
  6. Schritt 4: Admin — Admin-Konto erstellen. Starkes Passwort verwenden.
  7. Fertig! — Sie sehen die Cron-URL (speichern!) und einen Login-Button.

Schritt 5 — Automatische E-Mail-Benachrichtigungen via Hostinger Cron einrichten

AssetHub nutzt den Laravel-Scheduler für Hintergrundaufgaben: Garantie-Benachrichtigungen, Wartungs-Erinnerungen, Dokumentablauf, Abschreibungs-Refresh und überfällige Checkouts. Richten Sie einen Cron-Job in hPanel ein, Laravel entscheidet, welche Aufgabe wann läuft.

  1. In hPanel zu Erweitert → Cron Jobs gehen.
  2. Auf Cron-Job erstellen klicken.
  3. Typ wählen: Custom (nicht "PHP" — wir brauchen ein Argument).
  4. Für den Befehl eingeben (uXXXXXX durch Ihren Hostinger-Benutzernamen ersetzen):
    /usr/bin/php /home/uXXXXXX/public_html/artisan schedule:run
    Tipp: File Manager öffnen, die Datei artisan (Projekt-Root) suchen, Rechtsklick → Eigenschaften, um den vollständigen Pfad zu kopieren.
  5. Zeitplan auf Jede Minute setzen — alle fünf Felder (Minute, Stunde, Tag, Monat, Wochentag) auf *.
  6. Auf Speichern klicken.

Das war's — AssetHub versendet jetzt automatisch Erinnerungen für überfällige Checkouts, Wartungs-Benachrichtigungen, Dokumentablauf-Alerts, Garantie-Alerts und aktualisiert die Asset-Abschreibungswerte. Laravel plant intern jeden Job in der korrekten Häufigkeit (täglich 08:00, monatlich, etc.).

Document Root auf public_html/public/ gesetzt? Kein Problem — Ihr Laravel-Code liegt weiterhin im Root public_html/, der Cron-Pfad bleibt also /home/uXXXX/public_html/artisan (kein /public/ anhängen).
Fallback für Hosts ohne Cron: Falls Sie nicht bei Hostinger sind oder Ihr Anbieter keine Cron Jobs unterstützt, bietet AssetHub auch eine Webhook-Trigger-URL.
  1. Als Admin anmelden → Einstellungen → Tab System → Cron-URL kopieren.
  2. Kostenlos bei cron-job.org registrieren.
  3. Cronjob erstellen, URL einfügen, auf Alle 15 Minuten setzen, speichern.

Schritt 6 — E-Mail konfigurieren (SMTP)

Hostinger stellt mit jedem Tarif E-Mail-Konten zur Verfügung. Um sie für AssetHub-Benachrichtigungen zu nutzen:

  1. In hPanel zu E-Mails → E-Mail-Konten gehen und eines anlegen (z.B. noreply@yourdomain.com).
  2. .env-Datei in public_html/ über File Manager bearbeiten:
    MAIL_MAILER=smtp
    MAIL_HOST=smtp.hostinger.com
    MAIL_PORT=587
    MAIL_USERNAME=noreply@yourdomain.com
    MAIL_PASSWORD=your_email_password
    MAIL_ENCRYPTION=tls
    MAIL_FROM_ADDRESS=noreply@yourdomain.com
    MAIL_FROM_NAME="Your Company Name"
  3. Datei speichern.
  4. Bei AssetHub anmelden → Einstellungen → Tab Email → Test-E-Mail senden. Wenn Sie sie erhalten, ist alles fertig.
SMTP-Limits auf Single: Hostinger Single erlaubt ~100 ausgehende E-Mails pro Stunde. Für größere Deployments einen dedizierten Anbieter wie SendGrid, Mailgun oder Postmark nutzen (kostenlose Stufen verfügbar).

Häufige Probleme auf Hostinger Single

"500 Internal Server Error" nach Upload

  • Prüfen, ob .htaccess im Root von public_html/ existiert und die Rewrite-Regeln enthält.
  • Prüfen, ob die PHP-Version in hPanel auf 8.2 oder 8.3 gesetzt ist.
  • storage/logs/laravel.log über File Manager prüfen für die echte Fehlermeldung.

"Permission denied" bei Uploads

Hostinger setzt normalerweise korrekte Berechtigungen, falls nicht:

  • Rechtsklick auf storage/ in File Manager → Berechtigungen → rekursiv auf 755 setzen.
  • Dasselbe für bootstrap/cache/.

QR-Scanner öffnet die Kamera nicht

Browser-Kamera-APIs erfordern HTTPS. Hostinger bietet kostenloses SSL via Let's Encrypt — in hPanel unter SSL → Verwalten aktivieren.

Geplante E-Mails werden nicht versendet

  • In hPanel → Cron Jobs → Spalte Last run bei Ihrem Cron-Eintrag prüfen. Wenn leer, läuft der Cron nicht — Artisan-Pfad prüfen.
  • Befehl manuell testen: Terminal in hPanel öffnen (falls verfügbar) und Cron-Befehl ausführen. Bei Fehler zeigt die Meldung das Problem (falsche PHP-Version, falscher Pfad, etc.).
  • Prüfen, ob SMTP korrekt konfiguriert ist (Einstellungen → Email → Test senden).
  • storage/logs/laravel.log auf Scheduler-Fehler prüfen.

Langsame Performance

Hostinger Single hat geteilte CPU/RAM. Bei mehr als 20 Nutzern erwägen:

  • Upgrade auf Premium (~$3,99/Monat) — schnellere Server, mehr Ressourcen, mehrere Datenbanken.
  • Oder Business (~$5,99/Monat) — dedizierte Ressourcen, tägliche Backups, Staging-Umgebung.

Deployment auf cPanel (Shared Hosting)

Diese Anleitung behandelt Standard-cPanel-Shared-Hosting (Namecheap, Bluehost, GoDaddy und die meisten günstigen Hoster). AssetHub wird mit vendor/ und vorkompilierten Frontend-Assets geliefert — kein Composer, npm oder Web-Terminal erforderlich. Falls Ihr cPanel kein Terminal hat, verwenden Sie SSH Access oder die unten aufgeführten Dateimanager-Alternativen.

Getestet auf: cPanel 110+ mit PHP 8.2/8.3, MySQL 5.7+/MariaDB 10.3+, Apache und nativen Cron Jobs. Das Home-Verzeichnis ist in der Regel /home/CPANELUSER/ — prüfen Sie die Seitenleiste in cPanel unter Allgemeine Informationen.

Schritt 1 — PHP-Version und Erweiterungen einrichten

  1. Melden Sie sich bei cPanel an.
  2. Öffnen Sie MultiPHP Manager (oder Select PHP Version) und setzen Sie Ihre Domain auf PHP 8.2 oder 8.3.
  3. Öffnen Sie MultiPHP INI Editor oder PHP Extensions und bestätigen Sie, dass diese Erweiterungen aktiviert sind:
    • OpenSSL, PDO, PDO_MySQL, Mbstring, GD, Tokenizer, XML, Ctype, JSON, Fileinfo
  4. Fehlt eine Erweiterung, aktivieren Sie sie in der Erweiterungsliste oder kontaktieren Sie den Support Ihres Hosters.

Schritt 2 — SSL (HTTPS) aktivieren

  1. Gehen Sie zu SSL/TLS Status (oder Let's Encrypt SSL / AutoSSL).
  2. Führen Sie AutoSSL aus oder installieren Sie ein kostenloses Zertifikat für Ihre Domain.
  3. HTTPS ist Pflicht, damit der QR-Scanner im Browser auf die Kamera zugreifen kann.
Tipp: Warten Sie einige Minuten nach der SSL-Aktivierung, dann rufen Sie https://ihredomain.de auf, um zu bestätigen, dass das Schloss-Symbol erscheint.

Schritt 3 — MySQL-Datenbank und Benutzer erstellen

  1. Öffnen Sie Manage My Databases (unter Datenbanken).
  2. Geben Sie unter Neue Datenbank erstellen einen Namen ein (z.B. assethub) und klicken Sie auf Erstellen. cPanel fügt automatisch Ihr Konto-Präfix hinzu — der vollständige Name sieht aus wie cpaneluser_assethub.
  3. Erstellen Sie unter MySQL-Benutzer einen Benutzer mit einem sicheren Passwort. Kopieren Sie den vollständigen Benutzernamen mit Präfix.
  4. Wählen Sie unter Benutzer zur Datenbank hinzufügen den Benutzer und die Datenbank aus, klicken Sie auf Hinzufügen und erteilen Sie dann ALLE RECHTE. Dieser Schritt wird leicht vergessen — ohne ihn erhalten Sie Access denied (1045)-Fehler.
  5. Notieren Sie diese drei Werte genau so, wie sie in cPanel angezeigt werden:
    • Datenbankname — z.B. u123_AssetHub
    • Benutzername — z.B. u123_admin
    • Passwort — automatisch generiert, gut aufbewahren

Schritt 4 — Dateien hochladen

  1. Öffnen Sie den Dateimanager und navigieren Sie zu public_html/ (Document Root Ihrer Domain).
  2. Aktivieren Sie Einstellungen → Versteckte Dateien anzeigen, damit Sie .htaccess und .env sehen können.
  3. Löschen Sie alle vorhandenen Standard-index.html-Dateien in public_html/.
  4. Laden Sie das Paket source.zip hoch und entpacken Sie es, oder laden Sie den Inhalt des Ordners /source/ per FTP hoch.
  5. Nach dem Entpacken muss public_html/ app/, public/, vendor/, die Root-.htaccess und artisan auf derselben Ebene enthalten.
Wichtig: Die Root-.htaccess leitet alle Anfragen an den Ordner public/ weiter — Sie müssen den Document Root auf den meisten Hostern nicht manuell ändern.

Schritt 5 — .env vor dem Installeur vorbereiten

Führen Sie diesen Schritt vor dem Aufruf von /install aus. Laravel benötigt einen gültigen APP_KEY und korrekte Datenbankeinstellungen in .env.

  1. Kopieren Sie im Dateimanager .env.example nach .env (gleicher Ordner wie artisan).
  2. Bearbeiten Sie .env und konfigurieren Sie mindestens:
    APP_NAME=AssetHub
    APP_ENV=production
    APP_DEBUG=false
    APP_URL=https://yourdomain.com
    
    DB_CONNECTION=mysql
    DB_HOST=127.0.0.1
    DB_PORT=3306
    DB_DATABASE=cpaneluser_assethub
    DB_USERNAME=cpaneluser_admin
    DB_PASSWORD="your_password"
    
    SESSION_DRIVER=file
    CACHE_STORE=file
  3. Setzen Sie DB_CONNECTION=mysql — die Standard-.env.example verwendet SQLite; Shared Hosting erfordert MySQL.
  4. Setzen Sie SESSION_DRIVER=file und CACHE_STORE=file vor der ersten Migration (verhindert "sessions-Tabelle nicht gefunden"-Fehler).
  5. Umschließen Sie DB_PASSWORD mit doppelten Anführungszeichen, wenn es Sonderzeichen enthält (#, $, ! usw.).

APP_KEY generieren (ohne Terminal)

Viele cPanel-Tarife enthalten kein Web-Terminal. Verwenden Sie eine dieser Methoden:

  • SSH Access (cPanel → Sicherheit → SSH Access): Verbinden Sie sich mit PuTTY oder PowerShell und führen Sie dann cd ~/public_html && php artisan key:generate aus.
  • Dateimanager-Hilfsskript — erstellen Sie temporär public/genkey.php, rufen Sie es im Browser auf, kopieren Sie das Ergebnis in APP_KEY= und löschen Sie die Datei sofort danach.
    <?php
    echo 'base64:' . base64_encode(random_bytes(32));
  • Auf Ihrem PC — wenn PHP lokal installiert ist, führen Sie php -r "echo 'base64:'.base64_encode(random_bytes(32));" aus und fügen Sie das Ergebnis in .env ein.
Sicherheit: Löschen Sie genkey.php, sobald Sie den Schlüssel kopiert haben. Lassen Sie niemals Hilfsskripte auf einem Produktionsserver liegen.
  • Setzen Sie die Berechtigungen für storage/ und bootstrap/cache/ auf 755 (rekursiv), wenn der Installeur Schreibfehler meldet.

Schritt 6 — Web-Installeur ausführen

  1. Öffnen Sie https://ihredomain.de/install in Ihrem Browser.
  2. Schritt 1: Anforderungen — alle Prüfungen müssen bestanden sein (grün). Beheben Sie fehlende PHP-Erweiterungen aus Schritt 1 oben.
  3. Schritt 2: Datenbank — geben Sie die exakten Präfixnamen aus Schritt 3 ein:
    • Host: 127.0.0.1 or localhost
    • Port: 3306
    • Datenbank: cpaneluser_assethub
    • Benutzer: cpaneluser_admin
    • Passwort: (your MySQL password)
  4. Schritt 3: Migration — klicken Sie auf "Run Migrations & Seed". Dauert ca. 10 Sekunden. Seite nicht neu laden.
  5. Deaktivieren Sie Include demo data für eine saubere Produktionsinstallation.
  6. Schritt 4: Admin — erstellen Sie Ihr Administratorkonto.
  7. Fertig! — speichern Sie die Cron-URL, die auf dem letzten Bildschirm angezeigt wird.

Schritt 7 — Cron Jobs für E-Mail-Benachrichtigungen einrichten

AssetHub benötigt einen jede Minute laufenden Cron-Job, damit Laravel Garantie-Benachrichtigungen, Wartungserinnerungen und andere geplante E-Mails versenden kann.

  1. Gehen Sie in cPanel zu Advanced → Cron Jobs.
  2. Setzen Sie unter Neuen Cron-Job hinzufügen den Zeitplan auf Jede Minute (* * * * *).
  3. Geben Sie den Befehl ein (ersetzen Sie CPANELUSER durch Ihren cPanel-Benutzernamen aus den Allgemeinen Informationen):
    /usr/local/bin/php /home/CPANELUSER/public_html/artisan schedule:run
    Tipp: Der PHP-Pfad kann /usr/local/bin/php oder /usr/bin/php sein — fragen Sie Ihren Hoster, wenn Sie unsicher sind. Der Artisan-Pfad ist der Ort, an den Sie das Projekt hochgeladen haben (normalerweise /home/CPANELUSER/public_html/artisan).
  4. Klicken Sie auf Neuen Cron-Job hinzufügen, um zu speichern.
Document Root auf public_html/public/ gesetzt? Der Cron zeigt weiterhin auf /home/CPANELUSER/public_html/artisan — fügen Sie kein /public/ hinzu.
Kein Cron verfügbar? Verwenden Sie stattdessen die In-App-Cron-URL:
  1. Als Admin anmelden → Einstellungen → System → Cron-URL kopieren.
  2. Registrieren Sie sich bei cron-job.org (kostenlos).
  3. Erstellen Sie einen Job, der diese URL alle 15 Minuten aufruft.

Schritt 8 — E-Mail (SMTP) konfigurieren

Erstellen Sie ein cPanel-E-Mail-Konto für ausgehende Benachrichtigungen:

  1. Gehen Sie zu E-Mail-Konten → erstellen Sie z.B. noreply@ihredomain.de.
  2. Bearbeiten Sie .env im Dateimanager:
    MAIL_MAILER=smtp
    MAIL_HOST=mail.yourdomain.com
    MAIL_PORT=587
    MAIL_USERNAME=noreply@yourdomain.com
    MAIL_PASSWORD=your_email_password
    MAIL_ENCRYPTION=tls
    MAIL_FROM_ADDRESS=noreply@yourdomain.com
    MAIL_FROM_NAME="Your Company Name"
  3. Speichern Sie, dann in AssetHub: Einstellungen → E-Mail → Test-E-Mail senden.
SMTP-Limits bei Shared Hosting: Viele cPanel-Hoster begrenzen ausgehende E-Mails (~100–500/Stunde). Für größere Teams verwenden Sie SendGrid, Mailgun oder Postmark.

Häufige Probleme bei cPanel

"Access denied for user" (SQLSTATE 1045)

  • Kopieren Sie den Datenbank- und Benutzernamen exakt aus cPanel — einschließlich des Konto-Präfixes.
  • Bestätigen Sie, dass Sie Benutzer zur Datenbank hinzufügen mit ALLEN RECHTEN abgeschlossen haben.
  • Setzen Sie das MySQL-Passwort in cPanel zurück und aktualisieren Sie .env — verwenden Sie Anführungszeichen um DB_PASSWORD, wenn es Sonderzeichen enthält.

Migration schlägt fehl, nachdem der Datenbank-Schritt bestanden wurde

  • Der Installeur prüft die Formulardaten, aber Migrate liest aus .env. Stellen Sie sicher, dass beide übereinstimmen.
  • Löschen Sie bootstrap/cache/config.php, falls vorhanden, und versuchen Sie es erneut.
  • Stellen Sie sicher, dass DB_CONNECTION=mysql in .env gesetzt ist (nicht sqlite).

"Invalid default value" während der Migration (1067)

In AssetHub v2.1.0+ behoben (Tabelle checkouts verwendet dateTime-Spalten). Bei einer älteren Version aktualisieren Sie die Migrationsdatei oder laden Sie das neueste Paket von CodeCanyon herunter.

"500 Internal Server Error" nach dem Hochladen

  • Bestätigen Sie, dass die Root-.htaccess-Datei vorhanden ist und PHP 8.2+ verwendet wird.
  • Prüfen Sie storage/logs/laravel.log auf den eigentlichen Fehler.
  • Bestätigen Sie, dass APP_KEY in .env gesetzt ist — ein leerer Schlüssel verursacht 500-Fehler.

Kein Terminal in cPanel

Das ist bei vielen Shared-Tarifen normal. Verwenden Sie SSH Access (falls aktiviert), die temporäre genkey.php-Methode aus Schritt 5 oder generieren Sie den Schlüssel auf Ihrem lokalen PC.

QR-Scanner-Kamera öffnet sich nicht

Aktivieren Sie SSL über SSL/TLS Status → AutoSSL und greifen Sie auf die Website über https:// zu.

Konfiguration

.env-Datei

SchlüsselBeschreibungBeispiel
APP_NAMEApp-Name, der im Titel angezeigt wirdAssetHub
APP_URLÖffentliche URL Ihrer Installationhttps://assets.example.com
APP_DEBUGAuf false setzen in Produktionfalse
DB_*Datenbank-Verbindungsdetailsmysql, 127.0.0.1, 3306, ...
MAIL_MAILERMail-Driversmtp, log, mailgun
MAIL_HOSTSMTP-Server-Hostnamesmtp.gmail.com
MAIL_PORTSMTP-Port587
MAIL_USERNAMESMTP-Benutzernameyour@email.com
MAIL_PASSWORDSMTP-Passwort oder App-Token**********
MAIL_FROM_ADDRESSStandard-From-Adressenoreply@example.com

In-App-Einstellungen

Die meisten nicht sensiblen Optionen sind konfigurierbar über Admin → Einstellungen:

  • Allgemein: Firmenname/-E-Mail/-Telefon, Asset-Tag-Präfix
  • Email: Test-E-Mail senden, um SMTP zu prüfen
  • Benachrichtigungen: Garantie-Schwellen, Wartungs-Erinnerungsfenster
  • Lokalisierung: Zeitzone (durchsuchbare Liste inkl. Europe/Skopje), Datumsformat, Währungscode (inkl. MKD — Mazedonischer Denar), Symbol und Symbolposition — nach dem Speichern app-weit angewendet
  • Allgemein → Öffentliche Asset-Seite: QR-Sichtbarkeit (öffentlich / Login / deaktiviert) und alle QR-Codes nach URL-Änderungen neu generieren
  • Der Tab Lokalisierung verlinkt zu Administration → Translations für den vollständigen Translation Editor (nur Admin)
  • Branding: App-Name und Logo — aktualisiert Login-Logo, Footer, Badge und Browser-Seitentitel (v4.0+). Login-Untertitel: auth.login_subtitle unter Administration → Translations bearbeiten
  • Appearance (v4.0+): Marken-, Status- und Textfarben für Hell- und Dunkelmodus anpassen — siehe Rebrand-Anleitung in der FAQ

Mehrsprachen-Unterstützung

AssetHub wird mit 11 Sprachen out of the box geliefert, einschließlich RTL-Arabisch und Hindi. Benutzer wechseln die Sprache über das Flaggen-Dropdown oben rechts.

Mitgelieferte Sprachen

KürzelSpracheRichtung
enEnglish (default)LTR
viTiếng ViệtLTR
esEspañolLTR
frFrançaisLTR
deDeutschLTR
zh简体中文LTR
ja日本語LTR
pt-BRPortuguês (Brasil)LTR
ruРусскийLTR
arالعربيةRTL
hiहिन्दीLTR

Sprache wechseln

  1. Klicken Sie auf das Flaggen-Symbol oben rechts, um das Dropdown zu öffnen.
  2. Wählen Sie Ihre Sprache aus der Liste.
  3. Die Seite wird neu geladen; alle UI-Beschriftungen, Daten und Währungsformate wechseln.
  4. Ihre Wahl wird sowohl in Ihrem Benutzerkonto als auch in einem Cookie (1 Jahr) gespeichert.
Öffnen Sie die .html-Dateien der App nicht direkt. AssetHub ist eine serverseitige Laravel + Vue App — der Sprachwechsel sendet einen POST an /locale/{code}, was nur funktioniert, wenn ein PHP-Server läuft. Greifen Sie immer über Ihre echte Domain (Produktion) oder http://localhost:8000 (Dev mit php artisan serve) zu. Dokumentationsdateien wie diese sind dagegen vollständig eigenständig und können direkt geöffnet werden.

Benutzerdefinierte Sprache hinzufügen (Admin)

Gehen Sie zu Administration → Translations (Admin-Benutzer mit der Berechtigung manage translations):

  • "Add Locale" klicken — Code angeben (z. B. mk für Mazedonisch), Anzeigename, nativer Name, Flaggen-SVG-Dateiname, Richtung (LTR/RTL) und Basis-Locale zum Kopieren der Übersetzungen.
  • Die neue Locale erscheint im Sprachumschalter und in der Standard-Sprachenliste unter Einstellungen → Lokalisierung.
  • In der DB gespeicherte Übersetzungen überschreiben automatisch Dateiübersetzungen in lang/{code}/.

Translation Editor

Der Editor listet jeden Übersetzungsschlüssel nach Datei gruppiert (z. B. assets, nav, settings). Schlüssel zeigen die Datei-Baseline und DB-Overrides.

  • Nach Locale, Übersetzungsgruppe oder Suchtext filtern.
  • Auf einen Wert klicken, um inline zu bearbeiten; Änderungen werden sofort in der DB gespeichert.
  • Schlüssel zurücksetzen, um zur Datei-Baseline zurückzukehren.
  • Integrierte Locales (en, vi, es, …) können bearbeitet werden; benutzerdefinierte Locales sind vollständig DB-gesteuert.
  • Nur Benutzer mit der Berechtigung manage translations können diese Seite aufrufen.

CSV import / export

  • Export — alle Schlüssel einer Locale als CSV herunterladen (group,key,value).
  • Import — CSV mit denselben Spalten hochladen; bestehende DB-Overrides werden aktualisiert, neue Schlüssel eingefügt.

Standard-Locale pro Benutzer

Jeder Benutzer hat eine locale-Spalte. E-Mail-Benachrichtigungen werden automatisch in der bevorzugten Sprache des Empfängers gesendet dank Laravels HasLocalePreference-Contract.

Die Standard-Sprache der Site wird unter Einstellungen → Lokalisierung → Standard-Sprache festgelegt. Einzelne Benutzer überschreiben dies über den Sprachumschalter in der Kopfzeile.

Funktionsliste

Asset-Management

  • Automatisch generierte Asset-Tags
  • Mehrere Bilder pro Asset
  • QR-Code-Generierung
  • Status- und Zustandsverfolgung
  • Massenimport/-export
  • Asset klonen
  • Batch-/Lot-Mengenverfolgung (v2)

Arbeitsabläufe

  • Zuweisen / Rückgabe / Transfer
  • Genehmigungsbasierte Anfragen
  • Check-in / Check-out-Buchung
  • Konflikterkennung

Wartung

  • Präventiv/korrektiv planen
  • Kalenderansicht
  • Nächste automatisch planen
  • Kostenverfolgung
  • E-Mail-Erinnerungen

Dokumente

  • Rechnungen, Handbücher anhängen
  • Inline-Vorschau
  • Ablauf-Benachrichtigungen
  • Mehrere Dokumenttypen

Abschreibung

  • 3 Berechnungsmethoden
  • Wert automatisch aktualisieren
  • Zeitplan-Diagramm
  • Jahresübersicht

Berichte

  • 12 Berichtstypen
  • Excel- + PDF-Export
  • Diagramme und Dashboards
  • Datumsfilter

Operativ (v2)

  • Batch-/Lot-Assets mit Live-Abgleich
  • Zuweisungen an Mitarbeiter, Abteilungen, Lager
  • Disposals mit Genehmigung nach Funktionstrennung
  • Öffentliche QR-Übergabeseite unter /a/{tag}

Lokalisierung & Übersetzungen (v3)

  • 11 integrierte UI-Sprachen + benutzerdefinierte Locales
  • Translation Editor mit Suche, Gruppenfilter, Inline-Bearbeitung
  • CSV-Import/-Export für Massenaktualisierungen von Übersetzungen
  • Zeitzone- und Währungseinstellungen app-weit angewendet

Branding & Erscheinungsbild (v4)

  • Browser-Tab-Titel wird über Einstellungen → Branding → App-Name aktualisiert
  • App-Farben in Einstellungen → Erscheinungsbild anpassen (Hell- & Dunkelmodus)

Benutzer & Rollen

AssetHub wird mit 5 vorkonfigurierten Rollen ausgeliefert:

RolleBerechtigungen
AdminVoller Systemzugriff — Benutzer, Abteilungen, Einstellungen, Audit-Log, Webhooks, Übersetzungen
IT-ManagerAssets verwalten (Einzel + Batch/Lot), Kategorien, Wartung, Anfragen; Transfers genehmigen; Berichte und Abschreibung ansehen
BuchhalterAssets und Abschreibung verwalten, Inventuren durchführen, Transfers und Disposals genehmigen, voller Berichtszugriff (Finanzfokus)
SupervisorAbteilungsanfragen genehmigen, Checkouts verwalten, an Inventuren teilnehmen, Berichte ansehen
MitarbeiterZugewiesene Assets ansehen, Anfragen erstellen, eigene Checkouts verwalten

Berechtigungen werden als Spatie-Rollen gespeichert — Administratoren können pro Berechtigung über die Datenbank feinabstimmen.

Asset-Management

Assets erstellen

  1. Zu Assets → Neues Asset navigieren.
  2. Name, Kategorie, Marke, Modell, Seriennummer eintragen.
  3. Kaufdatum und Preis hinzufügen (erforderlich für Abschreibung).
  4. Bilder hochladen (mehrere Dateien möglich, max. 5 MB pro Datei).
  5. Speichern — Asset-Tag und QR-Code werden automatisch generiert.

Asset-Tag-Format

Standard: {PREFIX}-{YEAR}-{NNNN}, z.B. AS-2026-0001. Konfigurierbar über Einstellungen → Allgemein → Asset-Tag-Präfix.

Massenimport

  1. Auf Importieren auf der Assets-Seite klicken.
  2. Excel-Vorlage herunterladen.
  3. Daten eintragen — Pflichtspalten: name, category_name.
  4. Datei hochladen.

Batch-/Lot-Assets (v2)

Für identische Artikel in größerer Menge (Stühle, Tastaturen, Uniformen) wählen Sie im Formular Neues Asset Tracking-Typ → Batch / Lot statt doppelte Datensätze anzulegen.

  1. Geben Sie Menge und Einheit ein (Stück, Set, Karton). Beim Speichern wird der Bestand dem Lagerpool zugeordnet.
  2. Öffnen Sie das Asset → Register AllocationsAllocate, um Einheiten einem Mitarbeiter oder einer Abteilung zuzuweisen.
  3. Verwenden Sie Return, Adjust (beschädigt/verloren/Reparatur) oder Dispositionsaktionen — die Live-Zusammenfassung muss mit der Gesamtmenge übereinstimmen.
  4. Batch-Assets unterstützen nur Stückpreise; Abschreibung ist optional und standardmäßig deaktiviert für schnellere Einrichtung.
Hinweis zum Upgrade: Bestehende v1-Einzelassets bleiben unverändert. Führen Sie nach dem Update auf v2 php artisan migrate aus — kein Datenverlust.

QR-Codes

Jedes Asset erhält bei der Erstellung automatisch einen QR-Code. Beim Scannen öffnet sich die öffentliche oder authentifizierte Asset-Seite (siehe unten). In-App-Scan springt direkt zum Asset-Detailbildschirm.

Etiketten drucken

  • Einzeletikett: Auf das Drucker-Symbol in einer Asset-Zeile klicken.
  • PDF-Format: A4, 2 Etiketten pro Reihe, enthält Asset-Tag, Name, Marke, Seriennummer.

Scannen

Auf QR scannen auf der Assets-Seite klicken. Kameraberechtigung erlauben. Der Scanner nutzt html5-qrcode und funktioniert auf jedem modernen Browser. Hinweis: Kamerazugriff erfordert HTTPS oder localhost.

Öffentliche QR-Übergabeseite (v2)

Jedes Asset hat auch eine druckbare öffentliche URL unter /a/{asset_tag} — nützlich für physische Übergabe ohne Anmeldung.

  • Konfigurieren unter Einstellungen → Allgemein → Öffentliche Asset-Seite: Öffentlich, Login erforderlich oder Deaktiviert.
  • Die Seite zeigt Foto, Schlüsselfelder und (bei Batches) Mengenaufschlüsselung. Benutzer können sie als Übergabeblatt drucken.
  • Nach Änderung von APP_URL auf Regenerate all QR codes im selben Einstellungsbereich klicken.

Arbeitsabläufe

Asset-Zuweisung

  1. Asset-Detailseite öffnen.
  2. Auf Zuweisen klicken (sichtbar, wenn Asset verfügbar).
  3. Benutzer wählen, optionales Rückgabedatum, Notizen.
  4. Senden — Transaktion wird erstellt und E-Mail-Benachrichtigung versendet.

Asset-Anfragen

Mitarbeiter können Anfragen für benötigte Assets einreichen. Anfragen haben 4 Status: pending → approved → fulfilled, oder rejected. Genehmigungs-E-Mails werden automatisch versendet.

Check-in / Check-out

Für geteilte Assets (Kameras, Beamer, Fahrzeuge). Buchungen haben Datumsbereiche; das System verhindert überlappende Checkouts. Die Kalenderansicht zeigt alle Buchungen auf einen Blick.

Disposals — Formelle Abschreibung (v2)

Abgenutzte oder beschädigte Artikel werden in dokumentierten Batches mit Funktionstrennung abgeschrieben (Antragsteller ≠ Genehmiger). Erfordert die Berechtigungen manage disposals und approve disposals.

  1. Sidebar → DisposalsNew Disposal. Titel und Zeitraum festlegen (Q1–Q4, jährlich oder ad hoc).
  2. Entwurf öffnen → Add items — berechtigte beschädigte Batch-Einheiten oder Einzelassets im Zustand Poor.
  3. Submit for approval klicken — der Batch wird gesperrt.
  4. Ein anderer Genehmiger klickt Approve & execute — Assets/Einheiten werden als disposed markiert.
  5. Abschreibungsprotokoll (PDF) für Compliance-Unterlagen drucken.
Unwiderruflich: Genehmigte Disposals können nicht rückgängig gemacht werden. Bewahren Sie das unterschriebene PDF in Ihrer Audit-Spur auf.

Abschreibung

AssetHub berechnet die Asset-Abschreibung mit einer von drei Methoden:

MethodeFormelAnwendungsfall
Linear(Cost - Salvage) / Useful LifeAm häufigsten; gleiche jährliche Abschreibung
Degressiv2 / Useful Life × Book ValueBeschleunigt; für Steuerzwecke
LeistungsabschreibungNutzungsbasiertFertigungsausrüstung

Standardwerte werden von der Asset-Kategorie geerbt. Zeitplan-Einträge werden monatlich generiert. Der current_value des Assets wird automatisch am 1. jedes Monats aktualisiert.

Benutzerdefinierte Felder

Admin → Benutzerdefinierte Felder erlaubt unbegrenzte benutzerdefinierte Attribute für Assets:

  • Typen: Text, Zahl, Datum, Auswahl (Dropdown), Textbereich, Datei, Checkbox
  • Geltungsbereich: für alle Kategorien oder eine bestimmte Kategorie
  • Umsortieren: per Drag-and-drop am Griff
  • Pflichtfelder werden beim Speichern validiert

Berichte

Zwölf integrierte Berichte, erreichbar über das Menü Berichte:

  1. Asset-Übersicht — Summen nach Status, Zustand, Kategorie, Abteilung
  2. Abschreibung — Wertverlust pro Kategorie, am stärksten abgeschriebene Assets
  3. Transaktionen — Zuweisung, Rückgabe, Transfer-Aktivität im Zeitverlauf
  4. Wartungskosten — Ausgaben nach Monat, Kategorie, Typ
  5. Garantieablauf — Assets, die in 30/60/180 Tagen Aufmerksamkeit benötigen
  6. Abteilungs-Assets — Asset-Verteilung und Budgetnutzung nach Abteilung
  7. Assets nach Quelle — Verteilung auf Beschaffung, Projekt, Spende, Transfer
  8. Inventurzusammenfassung — Abweichungen in periodischen Inventurzyklen
  9. Mitarbeiter-Zuweisungen (v2) — wer was hält, einschließlich Batch-Zuweisungen
  10. Abteilung / Standort (v2) — Assets und Mengen nach Abteilung oder Standort
  11. Bestandsabgleich (v2) — Bestand vs. zugewiesen vs. beschädigt/verloren/entsorgt
  12. Beschädigte Assets (v2) — Artikel für Reparatur oder Abschreibung markiert

Alle Berichte unterstützen Excel- und PDF-Export über Schaltflächen in der Seitenkopfzeile. v2-Berichte sind mengenbewusst (Asset-Anzahl + Gesamteinheiten).

HTTP-Hooks

AssetHub kann externe Dienste bei wichtigen Ereignissen benachrichtigen.

Verfügbare Ereignisse

  • asset.created, asset.updated, asset.deleted
  • asset.assigned, asset.returned, asset.transferred
  • request.created, request.approved, request.rejected, request.fulfilled
  • maintenance.scheduled, maintenance.started, maintenance.completed
  • checkout.created, checkout.returned

Payload-Format

{
  "event": "asset.assigned",
  "timestamp": "2026-05-05T08:00:00+00:00",
  "data": {
    "asset_id": 1,
    "asset_tag": "AS-2026-0001",
    "asset_name": "HP EliteDesk 800",
    "to_user_id": 4,
    "transaction_id": 12
  }
}

Signaturverifizierung

Wenn ein Secret konfiguriert ist, enthalten Requests den Header X-AssetHub-Signature mit HMAC-SHA256 des Body. Auf Ihrer Seite verifizieren:

$expected = hash_hmac('sha256', $rawBody, $secret);
if (hash_equals($expected, $request->header('X-AssetHub-Signature'))) {
  // gültig
}

Retry-Richtlinie

Fehlgeschlagene Lieferungen werden 3-mal mit 200 ms Verzögerung wiederholt. Nach 10 aufeinanderfolgenden Fehlschlägen wird der Webhook automatisch deaktiviert.

Geplante Aufgaben

AssetHub nutzt den Laravel-Scheduler für Hintergrund-Jobs. Sie brauchen nur einen Cron-Eintrag — Laravel verteilt intern jeden Job zur richtigen Zeit.

Shared Hosting (cPanel / Hostinger Cron-Jobs-Oberfläche)

Siehe Abschnitt cPanel-Einrichtung → Schritt 7 oder Hostinger-Einrichtung → Schritt 5 für Anleitungen mit Screenshots. Kurzfassung: Advanced → Cron Jobs, Befehl:

/usr/bin/php /home/uXXXXXX/public_html/artisan schedule:run

Zeitplan: jede Minute (* in allen fünf Feldern).

cPanel-Cron-Befehl

Ersetzen Sie CPANELUSER durch Ihren cPanel-Benutzernamen:

/usr/local/bin/php /home/CPANELUSER/public_html/artisan schedule:run

VPS / Dedicated Server (crontab)

crontab -e als Web-Benutzer (oft www-data) ausführen und hinzufügen:

* * * * * cd /path/to/AssetHub && php artisan schedule:run >> /dev/null 2>&1

Fallback: Externer URL-Pinger

Falls Ihr Host gar keinen Cron hat, nutzen Sie die in-app Cron-URL (Einstellungen → Tab System) mit cron-job.org (kostenlos, alle 15 Min).

Jobs, die automatisch laufen

ZeitBefehlZweck
Täglich 08:00send-overdue-checkout-alertsE-Mail-Erinnerungen für überfällige Checkouts
Täglich 08:30send-maintenance-remindersErinnerungen für anstehende Wartungen
Täglich 09:00send-document-expiry-alertsDokumente, die in 30/14/7/1 Tagen ablaufen
Täglich 09:30send-warranty-alertsGarantie- und Versicherungs-Ablaufbenachrichtigungen
Täglich 10:00assethub:send-depreciation-end-alertsBenachrichtigungen, wenn Assets das Ende der Nutzungsdauer erreichen
Täglich 10:30send-inventory-audit-remindersErinnerungen für aktive Inventuren
Monatlich am 1., 02:00update-asset-valuescurrent_value des Assets aus der Abschreibung aktualisieren

Upgrade Guides

Step-by-step guides for updating an existing installation. Open the guide that matches your current version.

Fehlerbehebung

"Permission denied" auf storage

chmod -R 775 storage bootstrap/cache
chown -R www-data:www-data storage bootstrap/cache

QR-Scanner öffnet die Kamera nicht

Browser-Kamera-APIs erfordern HTTPS. Entweder ein SSL-Zertifikat installieren oder localhost zum Testen verwenden.

E-Mails kommen nicht an

storage/logs/laravel.log auf Fehler prüfen. Einstellungen → Email → Test-E-Mail senden verwenden, um SMTP-Zugangsdaten zu prüfen. Sicherstellen, dass der SMTP-Server die sendende IP erlaubt.

Datenbank "Access denied" (1045) bei cPanel

Falscher Benutzername/Passwort, fehlende Benutzerzuweisung zur Datenbank oder Sonderzeichen im Passwort, die das Parsen von .env beschädigen. Siehe cPanel-Einrichtung → Häufige Probleme.

Migrationsfehler 1067 (Invalid default value)

Der MySQL-Strict-Modus auf Shared Hosting lehnt mehrere timestamp NOT-NULL-Spalten ab. In v2.1.0+ behoben. Aktualisieren Sie Ihr Paket oder ändern Sie checkout_date / expected_return_date in dateTime in der Checkouts-Migration.

Fehlender APP_KEY / 500-Fehler vor der Installation

Laravel benötigt APP_KEY in .env, bevor die Anwendung lädt. Falls cPanel kein Terminal hat, siehe cPanel-Einrichtung → Schritt 5 für SSH-, genkey.php- oder lokale Generierungsmethoden.

Installation zurücksetzen

storage/installed.lock löschen und /install erneut aufrufen. Bestehende Daten werden gelöscht, wenn Migrations erneut laufen.

Performance — langsame Asset-Liste

php artisan optimize ausführen, um Config, Routes, Views zu cachen. Sicherstellen, dass MySQL Indizes auf assets.asset_tag, assets.serial_number, assets.status hat (werden automatisch durch Migrations erstellt).

Upgrading from v3.0.x to v3.1

Download the v3.1 package from CodeCanyon, replace application files (keep your .env and storage/ uploads). No new migrations are required. The new visible_locales setting is optional — if unset, all languages remain visible in the navbar picker.

v3.0 → v3.1 — Full upgrade guide

Upgrade von v2.x auf v3.0

Laden Sie das v3-ZIP von CodeCanyon herunter, ersetzen Sie Anwendungsdateien (behalten Sie .env und Uploads in storage/), führen Sie dann php artisan migrate aus. Neue Tabellen für benutzerdefinierte Locales und Übersetzungs-Overrides werden automatisch hinzugefügt. Bestehende Einstellungen und Assets bleiben erhalten.

v2.x → v3.0 — Full upgrade guide

Upgrade von v1.x auf v2.0

Laden Sie das v2-ZIP von CodeCanyon herunter, ersetzen Sie Anwendungsdateien (behalten Sie .env und Uploads in storage/), führen Sie dann php artisan migrate aus. Das Upgrade ist nicht destruktiv — bestehende Einzelassets funktionieren weiter; neue Batch-/Disposal-Tabellen werden automatisch hinzugefügt.

v1.x → v2.0 — Full upgrade guide

Änderungsprotokoll

v3.1.0 — Visible Language Picker (2026-06)

  • Settings → Localization: checklist to choose which languages appear in the navbar language dropdown (built-in + custom locales)
  • Default language is always visible; picker auto-hides when only one language is selected
  • Backend validates locale switches; users on a hidden locale fall back to the default language
  • No database migration required — upgrade is file-replace only
  • Login-Branding: Footer-Copyright und Badge folgen Settings → Branding → App Name (kein Code-Edit nötig)

v3.0.0 — Lokalisierung & Translation Editor (2026-06)

  • Translation Editor UI unter Administration → Translations (Locale hinzufügen, Inline-Bearbeitung, Suche/Filter nach Gruppe)
  • Benutzerdefinierte Locales in der DB — Code, Anzeigename, nativer Name, Flaggen-SVG, Richtung, Basis-Locale
  • CSV-Import/-Export für Massenaktualisierungen von Übersetzungen
  • Zeitzone- und Währungseinstellungen jetzt app-weit angewendet (config/localization.php inkl. Europe/Skopje, MKD)
  • Einstellungen → Lokalisierung: durchsuchbare Dropdowns für Zeitzone/Währung mit Unterstützung benutzerdefinierter Werte
  • Hindi (hi) als 11. integrierte Locale hinzugefügt; date_format wird auf Vue-Seiten berücksichtigt
  • Berechtigungsgesteuertes manage translations; DB-Overrides werden mit lang/-Datei-Baseline zusammengeführt

v2.0.0 — Operatives Release (2026-06)

  • Batch-/Lot-Assets — Mengenverfolgung, Zuweisungen, Rückgaben, Live-Abgleich
  • 4 operative Berichte: Employee Assignments, Department/Location, Inventory Reconciliation, Damaged Assets
  • Disposals-Modul — Abschreibungs-Batches, Genehmigung mit Funktionstrennung, druckbares Protokoll (PDF)
  • Öffentliche QR-Asset-Seite unter /a/{tag} mit konfigurierbarer Sichtbarkeit
  • Bestehende Berichte zeigen jetzt Asset-Anzahl + Gesamteinheiten
  • QR-Codes verlinken auf die öffentliche Übergabeseite; das Transaktionsprotokoll erfasst Mengen bei Batch-Bewegungen
  • Aktualisierte Demo-Daten, Benutzerhandbuch (separat in documentation/ enthalten) und i18n-Strings

v1.0.0 — Initiale Veröffentlichung (2026-05)

  • Asset-CRUD mit automatischer QR-Code-Generierung
  • 5 Benutzerrollen (Admin, IT-Manager, Buchhalter, Supervisor, Mitarbeiter) mit granularen Berechtigungen
  • Asset-Quellen-Tracking (zentrale Beschaffung, dezentrale Beschaffung, Investitionsprojekt, Spende, interner Transfer)
  • Zuweisungs- und Rückgabe-Workflows mit E-Mail-Benachrichtigungen
  • Transfer-Genehmigungs-Workflow (pending → approved/rejected) mit Berechtigungs-Gating
  • Asset-Anfrage-Genehmigungs-Flow
  • Check-in/Check-out mit Kalenderansicht
  • Wartungsplanung mit automatischer Erneuerung
  • Dokumentanhänge mit Ablauf-Benachrichtigungen
  • Abschreibung mit 3 Berechnungsmethoden + End-of-Life-Benachrichtigungen
  • Inventur-Modul — periodische Bestandsaufnahme mit Abweichungsverfolgung
  • Benutzerdefinierte Felder mit 7 Eingabetypen und Drag-and-drop-Sortierung
  • 8 Berichte mit Diagrammen, Excel- und PDF-Export (inkl. Assets nach Quelle, Inventur-Zusammenfassung)
  • Audit-Log via Spatie Activitylog mit Diff-Viewer
  • Webhooks mit HMAC-Signierung und Auto-Retry
  • Mehrsprachige UI: 10 Sprachen (en, vi, es, fr, de, zh, ja, pt-BR, ru, ar mit RTL)
  • Einstellungs-UI für Firma, E-Mail, Benachrichtigungen, Lokalisierung, Übersetzungen
  • Web-basierter Installations-Assistent
  • Dark Mode mit Emerald-Teal-Palette

Danksagungen

Verwendete Open-Source-Bibliotheken