AssetHub Documentação

Perguntas frequentes

Posso rodar o AssetHub no plano Hostinger Single mais barato?

Sim — o AssetHub é totalmente compatível com o Hostinger Single (~$2,99/mês). O Single inclui PHP 8.3, MySQL, Cron Jobs nativos e SSL gratuito — tudo o que o AssetHub precisa. Sem SSH, sem Composer, sem linha de comando. Veja a seção Configuração Hostinger para o guia passo a passo.

Preciso de conhecimentos técnicos para instalar?

Não. O instalador via web cuida de tudo: verificação de requisitos, configuração do banco, migrações e criação da conta admin. Basta enviar os arquivos, acessar /install no navegador e seguir o assistente.

Como funcionam os e-mails agendados (alertas de garantia/manutenção)?

O AssetHub usa o agendador do Laravel. Você configura apenas um cron job que roda a cada minuto, e o Laravel distribui internamente cada tarefa no momento correto (diário 08:00, mensal, etc.). Para cPanel, configure em Advanced → Cron Jobs. Para Hostinger, use hPanel → Advanced → Cron Jobs. Veja Configuração cPanel → Passo 7 ou Configuração Hostinger → Passo 5. Se seu host não tiver cron, use a URL Cron do app com o serviço gratuito cron-job.org.

Quais métodos de depreciação são suportados?

Três métodos: Linha reta (depreciação anual constante), Saldo decrescente (acelerada, comum para impostos) e Unidades de produção (baseada em uso, para equipamentos de fabricação). Os valores dos ativos são atualizados automaticamente no dia 1º de cada mês.

O leitor de QR funciona em celulares?

Sim — ele usa a câmera do navegador via html5-qrcode e funciona em qualquer navegador moderno de celular/tablet/desktop. O único requisito é HTTPS. O AutoSSL do cPanel e o Let's Encrypt SSL do Hostinger funcionam imediatamente.

Posso adicionar campos próprios sem programar?

Sim. Admin → Campos personalizados permite adicionar atributos ilimitados (texto, número, data, seleção, área de texto, arquivo, caixa de seleção), limitá-los a categorias específicas, marcá-los como obrigatórios e reordená-los arrastando — tudo pela interface.

Quantos idiomas o AssetHub suporta?

11 locales prontos para uso: inglês, vietnamita, espanhol, francês, alemão, chinês, japonês, português (BR), russo, árabe (com suporte RTL completo) e hindi (हिन्दी). Administradores gerenciam traduções em Administration → Translations (requer a permissão manage translations).

Posso instalar o AssetHub em hospedagem compartilhada cPanel?

Sim — o AssetHub funciona em qualquer plano de hospedagem compartilhada cPanel padrão com PHP 8.2+, MySQL e Cron Jobs. Não é necessário Composer ou Node.js no servidor — o pacote já vem pré-compilado. Muitos hosts cPanel não incluem Terminal web; tudo bem. Consulte a seção Configuração cPanel para o guia completo passo a passo (incluindo como gerar APP_KEY sem Terminal).

Como rebrandear o AssetHub (página de login, título da aba e cores)?

O AssetHub pode ser totalmente rebrandeado pelo painel admin — sem editar código ou npm run build. Desde v3.1.0, logo, rodapé e badge do login seguem Settings → Branding → App Name. v4.0 adiciona o título da aba do navegador em tempo real e a aba Appearance para cores em todo o app nos modos claro e escuro.

Checklist de rebrand completo: atualize App Name (logo, login, título da aba) → edite auth.login_subtitle por idioma → personalize cores em Settings → Appearance.

Referência rápida:

ItemExemploComo alterar
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.

Visão geral

AssetHub é um sistema completo de gestão de ativos construído com Laravel 11, Vue 3 e Tailwind CSS. A versão 3.0 adiciona um Translation Editor completo, locales personalizados, importação/exportação CSV e localização efetiva de fuso horário/moeda — sobre a base do v2 (rastreamento batch/lot, alocações, disposições e páginas públicas de entrega QR).

Rastreamento por QR

Geração automática de códigos QR para cada ativo. Escaneie com qualquer câmera de navegador.

Depreciação

3 métodos: linha reta, saldo decrescente, unidades de produção.

Campos personalizados

Adicione atributos personalizados ilimitados — texto, data, seleção, arquivo, caixa.

Ganchos web

15 tipos de eventos com assinatura HMAC e auto-retry.

Log de auditoria

Cada mudança registrada com visualizador de diff completo.

Relatórios

12 relatórios com gráficos e exportação Excel e PDF.

Requisitos do servidor

  • PHP 8.2 ou superior
  • MySQL 5.7+ ou MariaDB 10.3+
  • Composer 2.x
  • Node.js 18+ e npm 9+
  • Servidor web: Apache ou Nginx

Extensões PHP requeridas

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

Espaço em disco

~ 200 MB mínimo. Reserve espaço extra para fotos de ativos e anexos de documentos.

Instalação

Opção A — Instalador web (Recomendado)

  1. Envie os arquivos do projeto para seu servidor web.
  2. Aponte o document root do domínio para public/.
  3. Defina permissões: storage/ e bootstrap/cache/ devem ser graváveis (chmod 775).
  4. Copie .env.example para .env e defina APP_KEY (execute php artisan key:generate se tiver SSH/Terminal, ou veja Configuração cPanel → Passo 5 para alternativas no Gerenciador de Arquivos).
  5. Acesse https://yourdomain.com/install no navegador.
  6. Siga o assistente — Requirements → Database → Migrate → Admin Account → Done.

Opção B — Instalação via CLI

# 1. Instalar dependências
composer install --no-dev --optimize-autoloader
npm install
npm run build

# 2. Configurar ambiente
cp .env.example .env
php artisan key:generate

# 3. Editar .env para credenciais do BD
# DB_HOST, DB_PORT, DB_DATABASE, DB_USERNAME, DB_PASSWORD

# 4. Criar tabelas e dados iniciais
php artisan migrate --seed

# 5. Criar link simbólico storage para uploads
php artisan storage:link

# 6. Cachear config para produção
php artisan config:cache
php artisan route:cache
php artisan view:cache

# 7. Marcar como instalado
echo "Installed" > storage/installed.lock
Configuração do servidor web: O document root deve apontar para o diretório public/. Para Apache, o .htaccess incluído cuida do URL rewriting. Para Nginx, consulte o guia de deploy do Laravel.

Assistente Passo 2 — Configuração do banco de dados

Quando o assistente chegar ao Passo 2, você deve informar os detalhes de conexão MySQL do banco criado no painel de hospedagem. O banco deve já existir (pode estar vazio — a próxima etapa do assistente criará as tabelas).

CampoPadrão / ExemploNotas
Host127.0.0.1Funciona em 99% dos hosts compartilhados (Hostinger, cPanel, Plesk). Mantenha este padrão, a menos que sua hospedagem forneça um hostname MySQL personalizado (serviços de BD gerenciados como AWS RDS, DigitalOcean Managed Database).
Port3306Porta MySQL padrão. Altere apenas se seu provedor usar uma porta não padrão (raro).
Nome do banco de dadosuXXXXXX_assethubO nome completo exibido no painel de hospedagem. A maioria dos hosts compartilhados adiciona um prefixo com seu ID de usuário (ex.: Hostinger: u287094729_assethub).
Nome de usuáriouXXXXXX_assethubUsuário MySQL com permissões no banco acima. Não use root — hosts compartilhados não permitem.
Senha(sua senha do BD)A senha que você definiu ou copiou ao criar o usuário MySQL. A maioria dos hosts mostra apenas uma vez na criação — use "View / Reset" se não salvou.

Onde encontrar essas credenciais por painel de hospedagem

  • Hostinger: hPanel → Databases → Management → clique no seu banco de dados. A página mostra nome, usuário e um botão "Show password".
  • cPanel: cPanel → MySQL Databases. A lista de bancos mostra os nomes; os usuários aparecem abaixo. Use "Change Password" se necessário.
  • Plesk: Plesk → Databases → clique no nome do banco de dados. A página de detalhes mostra as credenciais e oferece redefinição de senha.
  • DirectAdmin: DirectAdmin → MySQL Management → clique no banco de dados. As credenciais e a redefinição de senha estão na página de detalhes.
  • BD externo / gerenciado: AWS RDS, DigitalOcean Managed Database, etc. Use o hostname personalizado, a porta (geralmente 3306, mas verifique), o nome do BD, o usuário e a senha do console na nuvem. Certifique-se de que o IP do servidor esteja na whitelist do firewall do BD.

Erros comuns e como corrigi-los

Mensagem de erroCausa e correção
SQLSTATE[HY000] [1045] Access deniedUsuário ou senha incorretos, ou o usuário não tem acesso a este banco de dados. Verifique a grafia (incluindo o prefixo do usuário em hosts compartilhados). Redefina a senha no painel de hospedagem se não tiver certeza.
SQLSTATE[HY000] [1049] Unknown databaseO nome do banco de dados está errado, ou você ainda não criou o banco no painel de hospedagem. Crie-o primeiro e informe novamente o nome exato (incluindo qualquer prefixo).
SQLSTATE[HY000] [2002] Connection refusedO servidor MySQL não pode ser alcançado. Verifique Host e Port. Em hosts compartilhados, tente localhost em vez de 127.0.0.1 ou vice-versa. Para BD gerenciados, certifique-se de que o IP do servidor esteja na whitelist.
SQLSTATE[42S02] Base table not found: sessionsOcorre quando SESSION_DRIVER=database ou CACHE_STORE=database está definido no .env antes das tabelas existirem. Edite o .env e altere ambos para file, salve e recarregue o assistente. Você pode voltar para database após a instalação, se preferir.
could not find driverA extensão PHP pdo_mysql está ausente ou desabilitada. Habilite-a no painel de hospedagem (Configuração PHP → Extensões). No cPanel: MultiPHP INI Editor → Extensões ou Select PHP Version → Extensões. No Hostinger: hPanel → Advanced → PHP Configuration → aba PHP Extensions.
Dica: Os campos Host e Port já vêm preenchidos com os valores mais comuns (127.0.0.1 e 3306) — mantenha-os assim em hospedagem compartilhada. Você só precisa informar o nome do banco de dados, o usuário e a senha. Clique em Test & Save → para verificar a conexão e avançar para o Passo 3.

Localhost (Desenvolvimento local)

Guia rápido para rodar o AssetHub no seu computador para testes ou desenvolvimento antes do deploy em produção. Escolha o ambiente que corresponde ao seu sistema operacional.

Recomendado: Laravel Herd é o caminho mais rápido no macOS e Windows — sem Docker, sem configuração manual de Apache/MySQL. XAMPP e Laragon são boas alternativas gratuitas se você preferir um stack tradicional.

Opção 1 — Laravel Herd (Recomendado, macOS e Windows)

Laravel Herd é o ambiente local oficial do time Laravel — gratuito, nativo, sem Docker. Inclui PHP 8.2/8.3/8.4, Nginx e (no Herd Pro) MySQL/Redis.

  1. Baixe e instale o Laravel Herd em herd.laravel.com.
  2. Coloque a pasta do projeto AssetHub dentro de ~/Herd/ (macOS) ou %USERPROFILE%\Herd\ (Windows). O Herd cria um domínio .test automaticamente — ex.: http://assethub.test.
  3. Abra Herd → Sites e confirme que a versão do PHP é 8.2 ou 8.3. Clique com o direito no site → Secure para habilitar HTTPS (necessário para o leitor de QR).
  4. Crie um banco MySQL. Com Herd Pro, use Services → MySQL → Open in TablePlus. Caso contrário, instale o MySQL Community ou use SQLite (DB_CONNECTION=sqlite, touch database/database.sqlite).
  5. Copie .env.example para .env, preencha as credenciais do BD e execute php artisan key:generate na raiz do projeto.
  6. Abra http://assethub.test/install no navegador e siga o assistente do instalador.

Opção 2 — XAMPP (Windows, macOS, Linux)

XAMPP empacota Apache, MySQL/MariaDB e PHP. Grátis e multiplataforma. Garanta escolher uma versão com PHP 8.2 ou mais novo.

  1. Baixe o XAMPP 8.2+ em apachefriends.org e instale.
  2. Copie o projeto AssetHub para C:\xampp\htdocs\AssetHub\ (Windows) ou /Applications/XAMPP/htdocs/AssetHub/ (macOS).
  3. Abra o XAMPP Control Panel e inicie Apache e MySQL. Se as portas estiverem ocupadas, use Config → service.conf para trocar o Apache para 8080.
  4. Vá em http://localhost/phpmyadminNovo → crie um banco chamado assethub com agrupamento utf8mb4.
  5. Na pasta do projeto: copie .env.example para .env, defina DB_DATABASE=assethub, DB_USERNAME=root, deixe DB_PASSWORD vazio (padrão XAMPP). Execute php artisan key:generate.
  6. Acesse http://localhost/AssetHub/public/install para executar o assistente do instalador.
URLs limpas sem /public/: crie um virtual host em C:\xampp\apache\conf\extra\httpd-vhosts.conf apontando o DocumentRoot para a pasta public/ do projeto e adicione 127.0.0.1 assethub.local ao seu arquivo hosts.

Opção 3 — Laragon (Windows)

Laragon é um stack portátil para Windows projetado para Laravel — vhosts automáticos, URLs limpas, MySQL/MariaDB e HeidiSQL incluído.

  1. Baixe o Laragon Full em laragon.org e instale.
  2. No Laragon: Menu → PHP → Versão — mude para PHP 8.2 ou 8.3.
  3. Copie o projeto AssetHub para C:\laragon\www\AssetHub\.
  4. Clique em Start All. O Laragon cria o vhost automaticamente: http://assethub.test (apontando para a pasta public/).
  5. Abra o HeidiSQL (incluído) → crie o banco assethub. Credenciais padrão: usuário root, senha vazia.
  6. Edite o .env com as credenciais do BD, execute php artisan key:generate e acesse http://assethub.test/install.

Opção 4 — Servidor PHP embutido (sem servidor web)

A opção mais simples: o Laravel vem com artisan serve, que inicia um servidor PHP de desenvolvimento. Não exige Apache nem Nginx. Ideal para testes rápidos.

# Instalar dependências e configurar
cd /path/to/AssetHub
composer install
cp .env.example .env
php artisan key:generate

# Rodar migrations e seed dos dados iniciais
php artisan migrate --seed

# Iniciar o servidor de desenvolvimento
php artisan serve
# Depois acesse: http://127.0.0.1:8000/install

Problemas comuns no localhost

O leitor de QR não abre a câmera em http://

APIs de câmera do navegador exigem HTTPS, com uma exceção: http://localhost e http://127.0.0.1 são tratados como contextos seguros. Se você acessar o AssetHub via seu IP de LAN (ex.: http://192.168.1.10), a câmera será recusada. Use localhost para desenvolvimento, ou habilite HTTPS via Herd / mkcert.

Permission denied em storage (macOS / Linux)

Se aparecerem erros de escrita quando o app tenta logar ou cachear, corrija as permissões: chmod -R 775 storage bootstrap/cache. No Windows normalmente não é necessário.

Porta já em uso

Se a porta 8000 estiver ocupada por outro app, use uma porta diferente:

php artisan serve --port=8001

Testar e-mails localmente

SMTP real não está disponível na maioria das configurações localhost. Duas opções seguras: (1) defina MAIL_MAILER=log no .env — os e-mails são gravados em storage/logs/laravel.log em vez de enviados; ou (2) use Mailtrap / MailHog para capturar o e-mail de saída em uma caixa falsa.

MAIL_MAILER=log
# Todos os e-mails são gravados em storage/logs/laravel.log

Assets do frontend (Vite / Tailwind)

O frontend Vue/Tailwind do AssetHub vem pré-compilado no pacote. Se editar componentes Vue ou a config do Tailwind, você precisará do Node.js 18+:

npm install
npm run dev    # Hot-reload durante o desenvolvimento
npm run build  # Build de produção (executar antes do deploy)

Implantação no Hostinger Single (Hospedagem compartilhada)

Este é o caminho recomendado para usuários sem VPS ou experiência técnica. O AssetHub é totalmente compatível com o plano Hostinger Single Web Hosting mais barato (~$2,99/mês). Sem SSH, sem Composer, sem linha de comando — o Single inclui cron jobs nativos, PHP 8.3 e SSL gratuito.

Testado em: planos Hostinger Single, Premium, Business (PHP 8.2+, MySQL 5.7+, Cron Jobs nativos em todos).

Passo 1 — Prepare sua hospedagem

  1. Faça login no Hostinger hPanel.
  2. Vá em Hospedagem → Gerenciar para seu domínio.
  3. Defina a versão do PHP como 8.2 ou 8.3 via Avançado → Configuração PHP.
  4. Garanta que estas extensões PHP estejam ativas (geralmente padrão):
    • OpenSSL, PDO, PDO_MySQL, Mbstring, GD, Tokenizer, XML, Ctype, JSON, Fileinfo

Passo 2 — Criar banco de dados MySQL

  1. No hPanel, vá em Bancos de dados → MySQL Databases.
  2. Clique em Criar novo banco de dados.
  3. Anote estes 3 valores:
    • Nome do banco de dados — ex.: u123_AssetHub
    • Usuário — ex.: u123_admin
    • Senha — gerada automaticamente, guarde com segurança

Passo 3 — Enviar arquivos

  1. Vá em Arquivos → File Manager no hPanel.
  2. Navegue até public_html/ (é a raiz do seu domínio).
  3. Apague qualquer index.html ou default.php padrão nessa pasta.
  4. Clique em Enviar arquivos e envie o source.zip completo do pacote.
    Ou envie o conteúdo da pasta /source/ diretamente via FTP, se preferir.
  5. Se enviou um ZIP, clique com botão direito → Extrair. Após extração, todos os arquivos devem estar na raiz de public_html/.
  6. Verifique se public_html/ contém: app/, public/, vendor/, .htaccess, index.php (em public/), .env, etc.
Importante: Garanta que o arquivo .htaccess exista na raiz de public_html/. Ele contém as regras de URL rewriting. Se o File Manager esconder arquivos ocultos, clique em Configurações → Mostrar arquivos ocultos.

Passo 4 — Rodar o instalador

  1. Abra o navegador e acesse https://yourdomain.com/install.
  2. Você verá o AssetHub Installer.
  3. Passo 1: Requirements — Todas as verificações devem passar (verde). Se alguma falhar, contate o suporte da Hostinger para ativar a extensão PHP ausente.
  4. Passo 2: Database — Informe as credenciais do Passo 2 acima:
    • Host: localhost
    • Porta: 3306
    • Banco de dados: u123_AssetHub
    • Usuário: u123_admin
    • Senha: (a gerada pela Hostinger)
  5. Passo 3: Migrate — Clique em "Run Migrations & Seed". Demora ~10 segundos. Não atualize a página.
  6. Passo 4: Admin — Crie sua conta de administrador. Use uma senha forte.
  7. Pronto! — Você verá a URL Cron (salve-a!) e um botão de login.

Passo 5 — Configurar alertas de e-mail automáticos via Hostinger Cron

O AssetHub usa o scheduler do Laravel para tarefas em segundo plano: alertas de garantia, lembretes de manutenção, validade de documentos, atualização de depreciação e checkouts em atraso. Configure um cron job no hPanel e o Laravel decide qual tarefa rodar e quando.

  1. No hPanel, vá em Avançado → Cron Jobs.
  2. Clique em Criar Cron job.
  3. Selecione o tipo: Custom (não "PHP" — precisamos passar um argumento).
  4. Para o comando, informe (substitua uXXXXXX pelo seu usuário Hostinger):
    /usr/bin/php /home/uXXXXXX/public_html/artisan schedule:run
    Dica: abra o File Manager, localize o arquivo artisan (raiz do projeto), clique com botão direito → Propriedades para copiar o caminho completo.
  5. Defina a programação como A cada minuto — os cinco campos (Minuto, Hora, Dia, Mês, Dia da semana) em *.
  6. Clique em Salvar.

Pronto — o AssetHub agora envia automaticamente lembretes de checkout em atraso, alertas de manutenção, validade de documentos, garantias, e atualiza valores de depreciação. O Laravel agenda internamente cada job na frequência correta (diário 08:00, mensal, etc.).

Document root definido como public_html/public/? Sem problemas — seu código Laravel continua na raiz public_html/, então o caminho do cron permanece /home/uXXXX/public_html/artisan (não adicione /public/).
Alternativa para hosts sem cron: Se você não está na Hostinger ou seu provedor não tem cron jobs, o AssetHub também expõe uma URL para disparo via webhook.
  1. Faça login como admin → Configurações → aba Sistema → copie sua URL Cron.
  2. Cadastre-se gratuitamente em cron-job.org.
  3. Crie um cronjob, cole a URL, defina A cada 15 minutos, salve.

Passo 6 — Configurar e-mail (SMTP)

A Hostinger fornece contas de e-mail com cada plano. Para usá-las nas notificações do AssetHub:

  1. No hPanel, vá em E-mails → Contas de e-mail e crie uma (ex.: noreply@yourdomain.com).
  2. Edite o arquivo .env em public_html/ via File Manager:
    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. Salve o arquivo.
  4. Faça login no AssetHub → Configurações → aba Email → Enviar e-mail de teste. Se receber, está pronto.
Limites de SMTP no Single: O Hostinger Single permite ~100 e-mails de saída por hora. Para implantações maiores, use um provedor dedicado como SendGrid, Mailgun ou Postmark (com planos gratuitos).

Problemas comuns no Hostinger Single

"500 Internal Server Error" após envio

  • Verifique se .htaccess existe na raiz de public_html/ e contém as regras de rewrite.
  • Verifique se a versão do PHP está em 8.2 ou 8.3 no hPanel.
  • Confira storage/logs/laravel.log via File Manager para ver o erro real.

"Permission denied" em uploads

Normalmente a Hostinger define as permissões corretas, mas se não:

  • Clique com o direito em storage/ no File Manager → Permissões → defina 755 recursivamente.
  • O mesmo para bootstrap/cache/.

O leitor de QR não abre a câmera

APIs de câmera do navegador exigem HTTPS. A Hostinger fornece SSL gratuito via Let's Encrypt — ative em SSL → Gerenciar no hPanel.

E-mails agendados não são enviados

  • No hPanel → Cron Jobs → verifique a coluna Last run na entrada de cron. Se vazia, o cron não está disparando — confirme o caminho do artisan.
  • Teste o comando manualmente: abra Terminal no hPanel (se disponível) e rode o comando do cron. Se der erro, a mensagem indicará o problema (versão errada do PHP, caminho errado, etc.).
  • Verifique se o SMTP está configurado corretamente (Configurações → Email → Enviar teste).
  • Verifique storage/logs/laravel.log em busca de erros do scheduler.

Desempenho lento

O Hostinger Single tem CPU/RAM compartilhados. Se sua equipe tiver mais de 20 usuários, considere:

  • Upgrade para Premium (~$3,99/mês) — servidores mais rápidos, mais recursos, vários bancos.
  • Ou Business (~$5,99/mês) — recursos dedicados, backups diários, ambiente de staging.

Implantando no cPanel (Hospedagem Compartilhada)

Este guia cobre a hospedagem compartilhada cPanel padrão (Namecheap, Bluehost, GoDaddy e a maioria dos hosts econômicos). O AssetHub vem com vendor/ e ativos de frontend pré-compilados — sem necessidade de Composer, npm ou Terminal web. Se seu cPanel não tiver Terminal, use SSH Access ou as alternativas do Gerenciador de Arquivos abaixo.

Testado em: cPanel 110+ com PHP 8.2/8.3, MySQL 5.7+/MariaDB 10.3+, Apache e Cron Jobs nativos. O diretório home geralmente é /home/CPANELUSER/ — verifique na barra lateral do cPanel em Informações Gerais.

Passo 1 — Definir versão PHP e extensões

  1. Faça login no cPanel.
  2. Abra o MultiPHP Manager (ou Select PHP Version) e defina seu domínio como PHP 8.2 ou 8.3.
  3. Abra o MultiPHP INI Editor ou PHP Extensions e confirme que estas estão habilitadas:
    • OpenSSL, PDO, PDO_MySQL, Mbstring, GD, Tokenizer, XML, Ctype, JSON, Fileinfo
  4. Se alguma extensão estiver ausente, habilite-a na lista de extensões ou entre em contato com o suporte do host.

Passo 2 — Habilitar SSL (HTTPS)

  1. Vá em SSL/TLS Status (ou Let's Encrypt SSL / AutoSSL).
  2. Execute o AutoSSL ou instale um certificado gratuito para seu domínio.
  3. O HTTPS é obrigatório para que o leitor de QR do navegador acesse a câmera.
Dica: Aguarde alguns minutos após habilitar o SSL, depois acesse https://seudominio.com para confirmar que o ícone de cadeado aparece.

Passo 3 — Criar banco de dados MySQL e usuário

  1. Abra o Manage My Databases (em Bancos de dados).
  2. Em Create New Database, informe um nome (ex.: assethub) e clique em Create. O cPanel adiciona o prefixo da sua conta automaticamente — o nome completo ficará como cpaneluser_assethub.
  3. Em MySQL Users, crie um usuário com senha forte. Copie o nome de usuário completo com prefixo.
  4. Em Add User To Database, selecione o usuário e o banco, clique em Add e conceda ALL PRIVILEGES. Este passo é fácil de esquecer — sem ele você terá erros Access denied (1045).
  5. Anote esses três valores exatamente como aparecem no cPanel:
    • Nome do banco de dados — ex.: u123_AssetHub
    • Usuário — ex.: u123_admin
    • Senha — gerada automaticamente, guarde com segurança

Passo 4 — Enviar arquivos

  1. Abra o Gerenciador de Arquivos e vá para public_html/ (raiz de documentos do seu domínio).
  2. Habilite Configurações → Mostrar arquivos ocultos para que você possa ver .htaccess e .env.
  3. Exclua qualquer index.html padrão em public_html/ se houver.
  4. Envie o pacote source.zip e Extraia-o, ou envie o conteúdo da pasta /source/ via FTP.
  5. Após a extração, public_html/ deve conter app/, public/, vendor/, o .htaccess raiz e artisan no mesmo nível.
Importante: O .htaccess raiz redireciona todas as requisições para a pasta public/ — você não precisa alterar a raiz de documentos manualmente na maioria dos hosts.

Passo 5 — Preparar o .env antes de executar o instalador

Conclua este passo antes de acessar /install. O Laravel requer uma APP_KEY válida e as configurações corretas de banco de dados no .env.

  1. No Gerenciador de Arquivos, copie .env.example para .env (mesma pasta que artisan).
  2. Edite o .env e defina no mínimo:
    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. Defina DB_CONNECTION=mysql — o .env.example padrão usa SQLite; hospedagem compartilhada requer MySQL.
  4. Defina SESSION_DRIVER=file e CACHE_STORE=file antes da primeira migration (evita erros de "tabela de sessões não encontrada").
  5. Envolva DB_PASSWORD em aspas duplas se contiver caracteres especiais (#, $, !, etc.).

Gerar APP_KEY (sem necessidade de Terminal)

Muitos planos cPanel não incluem Terminal web. Use um destes métodos:

  • SSH Access (cPanel → Segurança → SSH Access): conecte-se com PuTTY ou PowerShell, depois execute cd ~/public_html && php artisan key:generate.
  • Auxiliar do Gerenciador de Arquivos — crie temporariamente o arquivo public/genkey.php, acesse-o no navegador, copie o resultado para APP_KEY= e exclua o arquivo imediatamente.
    <?php
    echo 'base64:' . base64_encode(random_bytes(32));
  • No seu PC — se PHP estiver instalado localmente, execute php -r "echo 'base64:'.base64_encode(random_bytes(32));" e cole o resultado no .env.
Segurança: Exclua genkey.php assim que copiar a chave. Nunca deixe scripts auxiliares em um servidor de produção.
  • Defina as permissões de storage/ e bootstrap/cache/ como 755 (recursivo) se o instalador reportar erros de gravação.

Passo 6 — Executar o instalador web

  1. Abra https://seudominio.com/install no navegador.
  2. Passo 1: Requisitos — todas as verificações devem passar (verde). Corrija qualquer extensão PHP ausente conforme o Passo 1 acima.
  3. Passo 2: Banco de dados — informe os nomes exatos com prefixo do Passo 3:
    • Host: 127.0.0.1 or localhost
    • Porta: 3306
    • Banco de dados: cpaneluser_assethub
    • Usuário: cpaneluser_admin
    • Senha: (your MySQL password)
  4. Passo 3: Migrate — clique em "Run Migrations & Seed". Leva ~10 segundos. Não atualize a página.
  5. Desmarque Include demo data para uma instalação de produção limpa.
  6. Passo 4: Admin — crie sua conta de administrador.
  7. Pronto! — salve a URL Cron exibida na tela final.

Passo 7 — Configurar Cron Jobs para alertas por e-mail

O AssetHub precisa de um cron job rodando a cada minuto para que o Laravel possa enviar alertas de garantia, lembretes de manutenção e outros e-mails agendados.

  1. No cPanel, vá em Advanced → Cron Jobs.
  2. Em Add New Cron Job, defina a programação como A cada minuto (* * * * *).
  3. Informe o comando (substitua CPANELUSER pelo seu nome de usuário do cPanel em Informações Gerais):
    /usr/local/bin/php /home/CPANELUSER/public_html/artisan schedule:run
    Dica: o caminho do PHP pode ser /usr/local/bin/php ou /usr/bin/php — pergunte ao host se não tiver certeza. O caminho do artisan é onde você enviou o projeto (geralmente /home/CPANELUSER/public_html/artisan).
  4. Clique em Add New Cron Job para salvar.
Raiz de documentos definida como public_html/public/? O cron ainda aponta para /home/CPANELUSER/public_html/artisan — não acrescente /public/.
Sem cron disponível? Use a URL Cron do app no lugar:
  1. Faça login como admin → Configurações → aba Sistema → copie a URL Cron.
  2. Cadastre-se em cron-job.org (gratuito).
  3. Crie uma tarefa que acesse essa URL a cada 15 minutos.

Passo 8 — Configurar e-mail (SMTP)

Crie uma conta de e-mail no cPanel para notificações de saída:

  1. Vá em Email Accounts → crie, por ex., noreply@seudominio.com.
  2. Edite o .env no Gerenciador de Arquivos:
    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. Salve, depois no AssetHub: Configurações → E-mail → Enviar e-mail de teste.
Limites de SMTP em hospedagem compartilhada: Muitos hosts cPanel limitam o e-mail de saída (~100–500/hora). Para equipes maiores, use SendGrid, Mailgun ou Postmark.

Problemas comuns no cPanel

"Access denied for user" (SQLSTATE 1045)

  • Copie o nome do banco de dados e o nome de usuário exatamente do cPanel — incluindo o prefixo da conta.
  • Confirme que concluiu Add User To Database com ALL PRIVILEGES.
  • Redefina a senha MySQL no cPanel e atualize o .env — use aspas ao redor de DB_PASSWORD se contiver caracteres especiais.

Migration falha após o passo de Banco de dados ter passado

  • O instalador testa as credenciais do formulário, mas o Migrate lê do .env. Certifique-se de que ambos coincidam.
  • Exclua bootstrap/cache/config.php se existir, depois tente novamente.
  • Certifique-se de que DB_CONNECTION=mysql está definido no .env (não sqlite).

"Invalid default value" durante a migration (1067)

Corrigido no AssetHub v2.1.0+ (a tabela checkouts usa colunas dateTime). Se tiver uma cópia mais antiga, atualize o arquivo de migration ou baixe o pacote mais recente do CodeCanyon.

"500 Internal Server Error" após envio

  • Verifique se o .htaccess raiz existe e se o PHP é 8.2+.
  • Verifique storage/logs/laravel.log para ver o erro real.
  • Confirme que APP_KEY está definido no .env — chave vazia causa erros 500.

Sem Terminal no cPanel

Isso é normal em muitos planos compartilhados. Use SSH Access (se habilitado), o método temporário genkey.php do Passo 5, ou gere a chave no seu PC local.

A câmera do leitor QR não abre

Habilite o SSL em SSL/TLS Status → AutoSSL e acesse o site por https://.

Configuração

Arquivo .env

ChaveDescriçãoExemplo
APP_NAMENome da aplicação exibido na barra de títuloAssetHub
APP_URLURL pública da sua instalaçãohttps://assets.example.com
APP_DEBUGDefina como false em produçãofalse
DB_*Detalhes de conexão ao bancomysql, 127.0.0.1, 3306, ...
MAIL_MAILERDriver de e-mailsmtp, log, mailgun
MAIL_HOSTHostname do servidor SMTPsmtp.gmail.com
MAIL_PORTPorta SMTP587
MAIL_USERNAMEUsuário SMTPyour@email.com
MAIL_PASSWORDSenha SMTP ou app token**********
MAIL_FROM_ADDRESSEndereço From padrãonoreply@example.com

Configurações in-app

A maioria das opções não sensíveis pode ser configurada em Admin → Configurações:

  • Geral: nome/e-mail/telefone da empresa, prefixo de asset tag
  • Email: enviar e-mail de teste para verificar SMTP
  • Notificações: limites de alerta de garantia, janela de lembrete de manutenção
  • Localização: fuso horário (lista pesquisável, incl. Europe/Skopje), formato de data, código de moeda (incl. MKD — Denar macedônio), símbolo e posição do símbolo — aplicados em todo o app após salvar
  • Geral → Public Asset Page: visibilidade do QR (público / login / desativado) e regenerar todos os códigos QR após alterações de URL
  • A aba Localização vincula a Administration → Translations para o Translation Editor completo (somente admin)
  • Branding: nome e logo — atualiza logo do login, rodapé, badge e título da aba do navegador (v4.0+). Subtítulo do login: edite auth.login_subtitle em Administration → Translations
  • Appearance (v4.0+): personalize cores de marca, status e texto para modos claro e escuro — veja o guia de rebrand nas FAQ

Suporte Multilíngue

O AssetHub inclui 11 idiomas prontos para uso, incluindo árabe RTL e hindi. Os usuários trocam de idioma pelo menu de bandeiras no canto superior direito.

Idiomas incluídos

CódigoIdiomaDireção
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

Como trocar de idioma

  1. Clique no ícone de bandeira (canto superior direito) para abrir o menu.
  2. Escolha seu idioma na lista.
  3. A página recarrega; todos os rótulos, datas e formatos de moeda mudam.
  4. Sua escolha é salva tanto na sua conta de usuário quanto em um cookie (1 ano).
Não abra os arquivos .html do app diretamente. O AssetHub é uma aplicação Laravel + Vue do lado do servidor — a troca de idioma faz POST para /locale/{code}, o que só funciona quando há um servidor PHP em execução. Sempre acesse pelo seu domínio real (produção) ou http://localhost:8000 (dev com php artisan serve). Já os arquivos de documentação como este são totalmente independentes e podem ser abertos diretamente.

Adicionando um idioma personalizado (admin)

Vá em Administration → Translations (usuários admin com permissão manage translations):

  • Clique em "Add Locale" — informe um código (ex.: mk para macedônio), nome de exibição, nome nativo, nome do arquivo SVG da bandeira, direção (LTR/RTL) e um locale base para copiar traduções.
  • O novo locale aparece no seletor de idioma e na lista de idioma padrão em Settings → Localization.
  • Traduções armazenadas no BD substituem automaticamente as traduções de arquivo em lang/{code}/.

Translation Editor

O editor lista cada chave de tradução agrupada por arquivo (ex.: assets, nav, settings). As chaves mostram a linha de base do arquivo e qualquer override no BD.

  • Filtre por locale, grupo de tradução ou texto de busca.
  • Clique em um valor para editar inline; as alterações são salvas no banco de dados imediatamente.
  • Redefina uma chave para voltar à linha de base do arquivo.
  • Locales integrados (en, vi, es, …) podem ser editados; locales personalizados são totalmente orientados pelo BD.
  • Somente usuários com a permissão manage translations podem acessar esta página.

CSV import / export

  • Export — baixe todas as chaves de um locale como CSV (group,key,value).
  • Import — envie um CSV com as mesmas colunas; overrides existentes no BD são atualizados e novas chaves são inseridas.

Locale padrão por usuário

Cada usuário tem uma coluna locale. Notificações por email são enviadas automaticamente no idioma preferido do destinatário graças ao contrato HasLocalePreference do Laravel.

O idioma padrão do site é definido em Settings → Localization → Default Language. Usuários individuais substituem isso pelo seletor de idioma no cabeçalho.

Lista de funcionalidades

Gestão de ativos

  • Asset tags autogerados
  • Várias imagens por ativo
  • Geração de código QR
  • Acompanhamento de status e condição
  • Importação/exportação em massa
  • Clonar ativo
  • Rastreamento de quantidade por lote / batch (v2)

Fluxos de trabalho

  • Atribuir / Devolver / Transferir
  • Solicitações com aprovação
  • Reserva Check-in / Check-out
  • Detecção de conflitos

Manutenção

  • Agendar preventiva/corretiva
  • Visão calendário
  • Auto-agendar próxima
  • Acompanhamento de custos
  • Lembretes por e-mail

Documentos

  • Anexar notas, manuais
  • Pré-visualização inline
  • Alertas de validade
  • Vários tipos de documento

Depreciação

  • 3 métodos de cálculo
  • Atualizar valor automaticamente
  • Gráfico de cronograma
  • Resumo anual

Relatórios

  • 12 tipos de relatórios
  • Exportação Excel + PDF
  • Gráficos e painéis
  • Filtros de data

Operacional (v2)

  • Ativos em lote / batch com conciliação em tempo real
  • Alocações para funcionários, departamentos e armazém
  • Disposições com aprovação e separação de funções
  • Página pública de entrega QR em /a/{tag}

Localização e traduções (v3)

  • 11 idiomas de interface integrados + locales personalizados
  • Translation Editor com busca, filtro por grupo e edição inline
  • Importação/exportação CSV para atualizações em massa de traduções
  • Configurações de fuso horário e moeda aplicadas em todo o app

Marca e aparência (v4)

  • O título da aba do navegador é atualizado em Configurações → Marca → Nome do aplicativo
  • Personalize as cores em Configurações → Aparência (modo claro e escuro)

Usuários e Funções

O AssetHub vem com 5 funções pré-configuradas:

FunçãoPermissões
AdminAcesso total ao sistema — usuários, departamentos, configurações, log de auditoria, webhooks, traduções
IT ManagerGerenciar ativos (individuais + batch/lot), categorias, manutenção e solicitações; aprovar transferências; ver relatórios e depreciação
ContadorGerenciar ativos e depreciação, executar auditorias de inventário, aprovar transferências e disposições, acesso completo a relatórios (foco financeiro)
SupervisorAprovar solicitações do departamento, gerenciar checkouts, participar de auditorias, ver relatórios
FuncionárioVer ativos atribuídos, criar solicitações, gerenciar próprios checkouts

As permissões são armazenadas como funções Spatie — administradores podem ajustar por permissão via banco de dados.

Gestão de ativos

Criando ativos

  1. Navegue até Ativos → Novo ativo.
  2. Preencha nome, categoria, marca, modelo, número de série.
  3. Adicione data de compra e preço (obrigatórios para depreciação).
  4. Envie imagens (vários arquivos suportados, máx. 5 MB cada).
  5. Salve — asset tag e código QR são gerados automaticamente.

Formato do Asset Tag

Padrão: {PREFIX}-{YEAR}-{NNNN}, ex.: AS-2026-0001. Configurável em Configurações → Geral → Prefixo Asset Tag.

Importação em massa

  1. Clique em Importar na página de Ativos.
  2. Baixe o modelo Excel.
  3. Preencha seus dados — colunas obrigatórias: name, category_name.
  4. Envie o arquivo.

Ativos em lote / batch (v2)

Para itens idênticos em quantidade (cadeiras, teclados, uniformes), escolha Tipo de rastreamento → Batch / Lot no formulário Novo ativo em vez de criar registros duplicados.

  1. Informe a quantidade e a unidade (peça, conjunto, caixa). Ao salvar, o estoque é colocado no pool do armazém.
  2. Abra o ativo → aba AllocationsAllocate para alocar unidades a um funcionário ou departamento.
  3. Use Return, Adjust (danificado/perdido/reparo) ou ações de disposição — o resumo em tempo real deve conciliar com a quantidade total.
  4. Ativos batch suportam apenas preço unitário; a depreciação é opcional e desativada por padrão para configuração mais rápida.
Nota de atualização: Ativos individuais v1 existentes permanecem inalterados. Execute php artisan migrate após atualizar para v2 — sem perda de dados.

Códigos QR

Cada ativo recebe automaticamente um código QR ao ser criado. A leitura abre a página pública ou autenticada do ativo (veja abaixo). A leitura no app vai direto para a tela de detalhes do ativo.

Imprimir etiquetas

  • Etiqueta única: clique no ícone de impressora em qualquer linha de ativo.
  • Formato PDF: A4, 2 etiquetas por linha, inclui asset tag, nome, marca, série.

Escaneamento

Clique em Escanear QR na página de Ativos. Permita o acesso à câmera. O leitor usa html5-qrcode e funciona em qualquer navegador moderno. Nota: acesso à câmera requer HTTPS ou localhost.

Página pública de entrega QR (v2)

Cada ativo também tem uma URL pública imprimível em /a/{asset_tag} — útil para entrega física sem login.

  • Configure em Settings → General → Public Asset Page: Público, Login obrigatório ou Desativado.
  • A página mostra foto, campos principais e (para lotes) detalhamento de quantidade. Os usuários podem imprimi-la como ficha de entrega.
  • Após alterar APP_URL, clique em Regenerate all QR codes no mesmo painel de configurações.

Fluxos de trabalho

Atribuição de ativo

  1. Abra a página de detalhe de um ativo.
  2. Clique em Atribuir (visível se o ativo estiver disponível).
  3. Escolha um usuário, data de devolução opcional, notas.
  4. Envie — a transação é criada e a notificação por e-mail enviada.

Solicitações de ativos

Funcionários podem enviar solicitações para ativos de que precisam. As solicitações têm 4 status: pending → approved → fulfilled, ou rejected. E-mails de aprovação são enviados automaticamente.

Check-in / Check-out

Para ativos compartilhados (câmeras, projetores, veículos). Reservas têm faixas de data; o sistema evita checkouts sobrepostos. A visão calendário mostra todas as reservas de relance.

Disposições — Baixa formal (v2)

Itens desgastados ou danificados são baixados em lotes documentados com separação de funções (proponente ≠ aprovador). Requer as permissões manage disposals e approve disposals.

  1. Barra lateral → DisposalsNew Disposal. Defina título e período (Q1–Q4, anual ou ad-hoc).
  2. Abra o rascunho → Add items — unidades batch danificadas elegíveis ou ativos individuais em condição Poor.
  3. Clique em Submit for approval — o lote é bloqueado.
  4. Um aprovador diferente clica em Approve & execute — ativos/unidades são marcados como disposed.
  5. Imprima o disposal minutes (PDF) para registros de conformidade.
Irreversível: Disposições aprovadas não podem ser desfeitas. Guarde o PDF assinado com sua trilha de auditoria.

Depreciação

O AssetHub calcula a depreciação dos ativos usando um de três métodos:

MétodoFórmulaCaso de uso
Linha reta(Cost - Salvage) / Useful LifeMais comum; depreciação anual constante
Saldo decrescente2 / Useful Life × Book ValueAcelerada; para impostos
Unidades de produçãoBaseado em usoEquipamentos de fabricação

Os padrões são herdados da categoria do ativo. As entradas de cronograma são geradas mensalmente. O current_value do ativo é atualizado automaticamente no 1º de cada mês.

Campos personalizados

Admin → Campos personalizados permite adicionar atributos personalizados ilimitados aos ativos:

  • Tipos: texto, número, data, seleção (dropdown), área de texto, arquivo, caixa de seleção
  • Escopo: aplicar a todas as categorias ou a uma específica
  • Reordenar: arraste a alça
  • Campos obrigatórios são validados ao salvar o ativo

Relatórios

Doze relatórios integrados, acessíveis pelo menu Relatórios:

  1. Resumo de ativos — totais por status, condição, categoria, departamento
  2. Depreciação — perda de valor por categoria, ativos mais depreciados
  3. Transações — atividade de atribuição, devolução, transferência ao longo do tempo
  4. Custo de manutenção — gastos por mês, categoria, tipo
  5. Expiração de garantia — ativos que precisam atenção em 30/60/180 dias
  6. Ativos por departamento — distribuição de ativos e uso de orçamento por departamento
  7. Ativos por origem — distribuição entre compra, projeto, doação, transferência
  8. Resumo de auditoria de inventário — discrepâncias em ciclos periódicos de auditoria
  9. Atribuições a funcionários (v2) — quem possui o quê, incluindo alocações batch
  10. Departamento / Localização (v2) — ativos e quantidades por departamento ou localização
  11. Conciliação de inventário (v2) — estoque vs alocado vs danificado/perdido/disposed
  12. Ativos danificados (v2) — itens marcados para reparo ou baixa

Todos os relatórios suportam exportação Excel e PDF pelos botões no cabeçalho da página. Relatórios v2 são conscientes de quantidade (contagem de ativos + unidades totais).

Ganchos web

O AssetHub pode notificar serviços externos em eventos importantes.

Eventos disponíveis

  • 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

Formato do Payload

{
  "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
  }
}

Verificação de assinatura

Se um secret estiver configurado, as requisições incluem o cabeçalho X-AssetHub-Signature contendo HMAC-SHA256 do corpo. Verifique do seu lado:

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

Política de retry

Entregas falhas são retentadas 3 vezes com 200 ms de atraso. Após 10 falhas consecutivas, o webhook é desativado automaticamente.

Tarefas agendadas

O AssetHub usa o scheduler do Laravel para jobs em segundo plano. Você precisa apenas de uma entrada de cron — o Laravel despacha internamente cada job no momento correto.

Hospedagem compartilhada (Interface de Cron Jobs do cPanel / Hostinger)

Consulte a seção Configuração cPanel → Passo 7 ou Configuração Hostinger → Passo 5 para instruções com capturas de tela. Em resumo: Advanced → Cron Jobs, comando:

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

Programação: a cada minuto (* nos cinco campos).

Comando cron do cPanel

Substitua CPANELUSER pelo seu nome de usuário do cPanel:

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

VPS / servidor dedicado (crontab)

Execute crontab -e como seu usuário web (geralmente www-data) e adicione:

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

Alternativa: pinger de URL externo

Se seu host não tem cron, use a URL Cron no app (Configurações → aba Sistema) com cron-job.org (grátis, a cada 15 min).

Jobs executados automaticamente

HoraComandoPropósito
Diário 08:00send-overdue-checkout-alertsLembretes por e-mail de checkouts em atraso
Diário 08:30send-maintenance-remindersLembretes de manutenção próxima
Diário 09:00send-document-expiry-alertsDocumentos vencendo em 30/14/7/1 dias
Diário 09:30send-warranty-alertsAlertas de expiração de garantia + seguro
Diário 10:00assethub:send-depreciation-end-alertsAlertas quando ativos chegam ao fim da vida útil
Diário 10:30send-inventory-audit-remindersLembretes para auditorias de inventário ativas
Mensal dia 1, 02:00update-asset-valuesAtualizar current_value de ativos a partir da depreciação

Upgrade Guides

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

Solução de problemas

"Permission denied" em storage

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

O leitor de QR não abre a câmera

APIs de câmera do navegador exigem HTTPS. Instale um certificado SSL ou use localhost para testar.

E-mails não chegam

Verifique storage/logs/laravel.log por erros. Use Configurações → Email → Enviar e-mail de teste para verificar credenciais SMTP. Garanta que seu servidor SMTP permita o IP de envio.

Banco de dados "Access denied" (1045) no cPanel

Usuário/senha incorretos, falta de atribuição do usuário ao banco de dados, ou caracteres especiais na senha que quebram a análise do .env. Consulte Configuração cPanel → Problemas comuns.

Erro de migration 1067 (Invalid default value)

O modo estrito do MySQL em hospedagem compartilhada rejeita múltiplas colunas timestamp NOT NULL. Corrigido na v2.1.0+. Atualize seu pacote ou altere checkout_date / expected_return_date para dateTime na migration de checkouts.

APP_KEY ausente / Erro 500 antes da instalação

O Laravel requer APP_KEY no .env antes de carregar o app. Se o cPanel não tiver Terminal, veja Configuração cPanel → Passo 5 para métodos SSH, genkey.php ou geração local.

Resetar instalação

Apague storage/installed.lock e acesse /install de novo. Dados existentes serão apagados se você rodar migrações novamente.

Desempenho — lista de ativos lenta

Execute php artisan optimize para cachear config, rotas, views. Garanta que o MySQL tenha índices em assets.asset_tag, assets.serial_number, assets.status (criados automaticamente pelas migrações).

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

Atualização de v2.x para v3.0

Baixe o ZIP v3 do CodeCanyon, substitua os arquivos da aplicação (mantenha seu .env e uploads em storage/), depois execute php artisan migrate. Novas tabelas para locales personalizados e overrides de tradução são adicionadas automaticamente. Configurações e ativos existentes são preservados.

v2.x → v3.0 — Full upgrade guide

Atualização de v1.x para v2.0

Baixe o ZIP v2 do CodeCanyon, substitua os arquivos da aplicação (mantenha seu .env e uploads em storage/), depois execute php artisan migrate. A atualização não quebra compatibilidade — ativos individuais existentes continuam funcionando; novas tabelas batch/disposal são adicionadas automaticamente.

v1.x → v2.0 — Full upgrade guide

Registro de alterações

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
  • Branding do login: rodapé e badge seguem Settings → Branding → App Name (sem editar código)

v3.0.0 — Localização e Translation Editor (2026-06)

  • Interface do Translation Editor em Administration → Translations (Add Locale, edição inline, busca/filtro por grupo)
  • Locales personalizados armazenados no BD — código, nome de exibição, nome nativo, SVG de bandeira, direção, locale base
  • Importação/exportação CSV para atualizações em massa de traduções
  • Configurações de fuso horário e moeda agora aplicadas em todo o app (config/localization.php incl. Europe/Skopje, MKD)
  • Settings → Localization: dropdowns de fuso horário/moeda com busca e suporte a valores personalizados
  • Hindi (hi) adicionado como 11.º locale integrado; date_format respeitado nas páginas Vue
  • manage translations com controle de permissão; overrides do banco se fundem com a linha de base dos arquivos lang/

v2.0.0 — Lançamento operacional (2026-06)

  • Ativos em lote / batch — rastreamento de quantidade, alocações, devoluções, conciliação em tempo real
  • 4 relatórios operacionais: Employee Assignments, Department/Location, Inventory Reconciliation, Damaged Assets
  • Módulo de disposições — lotes de baixa, aprovação com separação de funções, ata PDF imprimível
  • Página pública de ativos QR em /a/{tag} com visibilidade configurável
  • Relatórios legados atualizados para mostrar contagem de ativos + unidades totais
  • Códigos QR vinculam à página pública de entrega; o log de transações registra a quantidade em movimentações batch
  • Dados demo atualizados, guia do usuário (enviado separadamente em documentation/) e strings i18n

v1.0.0 — Lançamento inicial (2026-05)

  • CRUD de ativos com geração automática de QR
  • 5 funções de usuário (Admin, IT Manager, Contador, Supervisor, Funcionário) com permissões granulares
  • Rastreamento de Origem de ativo (compra centralizada, descentralizada, projeto de investimento, doação, transferência interna)
  • Fluxos de atribuição, devolução com notificações por e-mail
  • Fluxo de aprovação de transferência (pending → approved/rejected) com controle de permissão
  • Fluxo de aprovação de solicitações de ativos
  • Check-in/check-out com visão calendário
  • Programação de manutenção com auto-renovação
  • Anexos de documentos com alertas de validade
  • Depreciação com 3 métodos + alertas de fim de vida útil
  • Módulo de Auditoria de inventário — contagem periódica com rastreamento de discrepâncias
  • Campos personalizados com 7 tipos de entrada e ordenação drag-drop
  • 8 relatórios com gráficos, exportação Excel e PDF (incl. Ativos por origem, Resumo de auditoria)
  • Log de auditoria via Spatie Activitylog com visualizador de diff
  • Webhooks com assinatura HMAC e auto-retry
  • UI multi-idioma: 10 idiomas (en, vi, es, fr, de, zh, ja, pt-BR, ru, ar com RTL)
  • UI de Configurações para empresa, e-mail, notificações, localização, traduções
  • Assistente de instalação via web
  • Modo escuro com paleta emerald-teal

Créditos

Bibliotecas open-source utilizadas