Primeiros passos
Instale o AssetHub no cPanel, Hostinger ou no seu próprio VPS em menos de 10 minutos.
Usuários e Funções
5 funções pré-configuradas com permissões Spatie, ajustáveis por usuário.
Funcionalidades do produto
Ativos, fluxos de trabalho, manutenção, depreciação, log de auditoria e mais.
Personalização
Adicione campos personalizados ilimitados, mude branding, idiomas e temas.
Configuração Hostinger
Implantação passo a passo no plano Single compartilhado mais barato.
Configuração cPanel
Implantação passo a passo em hospedagem compartilhada cPanel padrão — sem necessidade de Terminal.
Segurança e QR
HTTPS, webhooks assinados com HMAC, log de auditoria e leitor QR pela câmera.
Relatórios e Exportação
8 relatórios integrados com exportação Excel + PDF e filtros de data.
Alertas por e-mail
Lembretes de garantia, manutenção, validade de documentos e checkouts em atraso.
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.
auth.login_subtitle por idioma → personalize cores em Settings → Appearance.
Referência rápida:
| Item | Exemplo | Como alterar |
|---|---|---|
| Top-left logo & wordmark | VimoticFAR | Settings → Branding → App Name |
| Login subtitle | Enter your credentials to access AssetHub | Administration → Translations → auth.login_subtitle |
| Footer copyright | © 2026 VimoticFAR | Settings → Branding → App Name |
| Right panel badge | VIMOTICFAR | Settings → Branding → App Name |
| Browser page title (tab) | YourAppName | Settings → Branding → App Name (v4.0+) |
| App colors (buttons, sidebar, badges…) | Custom green / blue palette | Settings → Appearance (v4.0+) |
1. Logo and wordmark:
- Sign in as an administrator.
- Go to Settings → Branding.
- Update App Name (and optionally upload a logo).
- 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→ replaceAssetHubwith 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 → Settings → Appearance (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 otherauth.*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-builtpublic/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)
- Envie os arquivos do projeto para seu servidor web.
- Aponte o document root do domínio para
public/. - Defina permissões:
storage/ebootstrap/cache/devem ser graváveis (chmod 775). - Copie
.env.examplepara.enve definaAPP_KEY(executephp artisan key:generatese tiver SSH/Terminal, ou veja Configuração cPanel → Passo 5 para alternativas no Gerenciador de Arquivos). - Acesse
https://yourdomain.com/installno navegador. - 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
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).
| Campo | Padrão / Exemplo | Notas |
|---|---|---|
| Host | 127.0.0.1 | Funciona 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). |
| Port | 3306 | Porta MySQL padrão. Altere apenas se seu provedor usar uma porta não padrão (raro). |
| Nome do banco de dados | uXXXXXX_assethub | O 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ário | uXXXXXX_assethub | Usuá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 erro | Causa e correção |
|---|---|
SQLSTATE[HY000] [1045] Access denied | Usuá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 database | O 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 refused | O 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: sessions | Ocorre 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 driver | A 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. |
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.
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.
- Baixe e instale o Laravel Herd em herd.laravel.com.
- Coloque a pasta do projeto AssetHub dentro de
~/Herd/(macOS) ou%USERPROFILE%\Herd\(Windows). O Herd cria um domínio.testautomaticamente — ex.:http://assethub.test. - 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).
- 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). - Copie
.env.examplepara.env, preencha as credenciais do BD e executephp artisan key:generatena raiz do projeto. - Abra
http://assethub.test/installno 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.
- Baixe o XAMPP 8.2+ em apachefriends.org e instale.
- Copie o projeto AssetHub para
C:\xampp\htdocs\AssetHub\(Windows) ou/Applications/XAMPP/htdocs/AssetHub/(macOS). - 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.
- Vá em
http://localhost/phpmyadmin→ Novo → crie um banco chamadoassethubcom agrupamento utf8mb4. - Na pasta do projeto: copie
.env.examplepara.env, definaDB_DATABASE=assethub,DB_USERNAME=root, deixeDB_PASSWORDvazio (padrão XAMPP). Executephp artisan key:generate. - Acesse
http://localhost/AssetHub/public/installpara executar o assistente do instalador.
/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.
- Baixe o Laragon Full em laragon.org e instale.
- No Laragon: Menu → PHP → Versão — mude para PHP 8.2 ou 8.3.
- Copie o projeto AssetHub para
C:\laragon\www\AssetHub\. - Clique em Start All. O Laragon cria o vhost automaticamente:
http://assethub.test(apontando para a pastapublic/). - Abra o HeidiSQL (incluído) → crie o banco
assethub. Credenciais padrão: usuárioroot, senha vazia. - Edite o
.envcom as credenciais do BD, executephp artisan key:generatee acessehttp://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.
Passo 1 — Prepare sua hospedagem
- Faça login no Hostinger hPanel.
- Vá em Hospedagem → Gerenciar para seu domínio.
- Defina a versão do PHP como 8.2 ou 8.3 via Avançado → Configuração PHP.
- 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
- No hPanel, vá em Bancos de dados → MySQL Databases.
- Clique em Criar novo banco de dados.
- Anote estes 3 valores:
Nome do banco de dados— ex.:u123_AssetHubUsuário— ex.:u123_adminSenha— gerada automaticamente, guarde com segurança
Passo 3 — Enviar arquivos
- Vá em Arquivos → File Manager no hPanel.
- Navegue até
public_html/(é a raiz do seu domínio). - Apague qualquer
index.htmloudefault.phppadrão nessa pasta. - Clique em Enviar arquivos e envie o
source.zipcompleto do pacote.
Ou envie o conteúdo da pasta/source/diretamente via FTP, se preferir. - Se enviou um ZIP, clique com botão direito → Extrair. Após extração, todos os arquivos devem estar na raiz de
public_html/. - Verifique se
public_html/contém:app/,public/,vendor/,.htaccess,index.php(empublic/),.env, etc.
.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
- Abra o navegador e acesse
https://yourdomain.com/install. - Você verá o AssetHub Installer.
- 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.
- 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)
- Host:
- Passo 3: Migrate — Clique em "Run Migrations & Seed". Demora ~10 segundos. Não atualize a página.
- Passo 4: Admin — Crie sua conta de administrador. Use uma senha forte.
- 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.
- No hPanel, vá em Avançado → Cron Jobs.
- Clique em Criar Cron job.
- Selecione o tipo: Custom (não "PHP" — precisamos passar um argumento).
- Para o comando, informe (substitua
uXXXXXXpelo seu usuário Hostinger):
Dica: abra o File Manager, localize o arquivo/usr/bin/php /home/uXXXXXX/public_html/artisan schedule:runartisan(raiz do projeto), clique com botão direito → Propriedades para copiar o caminho completo. - Defina a programação como A cada minuto — os cinco campos (Minuto, Hora, Dia, Mês, Dia da semana) em
*. - 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.).
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/).
- Faça login como admin → Configurações → aba Sistema → copie sua URL Cron.
- Cadastre-se gratuitamente em cron-job.org.
- 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:
- No hPanel, vá em E-mails → Contas de e-mail e crie uma (ex.:
noreply@yourdomain.com). - Edite o arquivo
.envempublic_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" - Salve o arquivo.
- Faça login no AssetHub → Configurações → aba Email → Enviar e-mail de teste. Se receber, está pronto.
Problemas comuns no Hostinger Single
"500 Internal Server Error" após envio
- Verifique se
.htaccessexiste na raiz depublic_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.logvia 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 → defina755recursivamente. - 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.logem 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.
/home/CPANELUSER/ — verifique na barra lateral do cPanel em Informações Gerais.
Passo 1 — Definir versão PHP e extensões
- Faça login no cPanel.
- Abra o MultiPHP Manager (ou Select PHP Version) e defina seu domínio como PHP 8.2 ou 8.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
- 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)
- Vá em SSL/TLS Status (ou Let's Encrypt SSL / AutoSSL).
- Execute o AutoSSL ou instale um certificado gratuito para seu domínio.
- O HTTPS é obrigatório para que o leitor de QR do navegador acesse a câmera.
https://seudominio.com para confirmar que o ícone de cadeado aparece.
Passo 3 — Criar banco de dados MySQL e usuário
- Abra o Manage My Databases (em Bancos de dados).
- 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á comocpaneluser_assethub. - Em MySQL Users, crie um usuário com senha forte. Copie o nome de usuário completo com prefixo.
- 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). - Anote esses três valores exatamente como aparecem no cPanel:
Nome do banco de dados— ex.:u123_AssetHubUsuário— ex.:u123_adminSenha— gerada automaticamente, guarde com segurança
Passo 4 — Enviar arquivos
- Abra o Gerenciador de Arquivos e vá para
public_html/(raiz de documentos do seu domínio). - Habilite Configurações → Mostrar arquivos ocultos para que você possa ver
.htaccesse.env. - Exclua qualquer
index.htmlpadrão empublic_html/se houver. - Envie o pacote
source.zipe Extraia-o, ou envie o conteúdo da pasta/source/via FTP. - Após a extração,
public_html/deve conterapp/,public/,vendor/, o.htaccessraiz eartisanno mesmo nível.
.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.
- No Gerenciador de Arquivos, copie
.env.examplepara.env(mesma pasta queartisan). - Edite o
.enve 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 - Defina
DB_CONNECTION=mysql— o.env.examplepadrão usa SQLite; hospedagem compartilhada requer MySQL. - Defina
SESSION_DRIVER=fileeCACHE_STORE=fileantes da primeira migration (evita erros de "tabela de sessões não encontrada"). - Envolva
DB_PASSWORDem 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 paraAPP_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.
genkey.php assim que copiar a chave. Nunca deixe scripts auxiliares em um servidor de produção.
- Defina as permissões de
storage/ebootstrap/cache/como 755 (recursivo) se o instalador reportar erros de gravação.
Passo 6 — Executar o instalador web
- Abra
https://seudominio.com/installno navegador. - Passo 1: Requisitos — todas as verificações devem passar (verde). Corrija qualquer extensão PHP ausente conforme o Passo 1 acima.
- Passo 2: Banco de dados — informe os nomes exatos com prefixo do Passo 3:
- Host:
127.0.0.1orlocalhost - Porta:
3306 - Banco de dados:
cpaneluser_assethub - Usuário:
cpaneluser_admin - Senha: (your MySQL password)
- Host:
- Passo 3: Migrate — clique em "Run Migrations & Seed". Leva ~10 segundos. Não atualize a página.
- Desmarque Include demo data para uma instalação de produção limpa.
- Passo 4: Admin — crie sua conta de administrador.
- 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.
- No cPanel, vá em Advanced → Cron Jobs.
- Em Add New Cron Job, defina a programação como A cada minuto (
* * * * *). - Informe o comando (substitua
CPANELUSERpelo seu nome de usuário do cPanel em Informações Gerais):
Dica: o caminho do PHP pode ser/usr/local/bin/php /home/CPANELUSER/public_html/artisan schedule:run/usr/local/bin/phpou/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). - Clique em Add New Cron Job para salvar.
public_html/public/? O cron ainda aponta para /home/CPANELUSER/public_html/artisan — não acrescente /public/.
- Faça login como admin → Configurações → aba Sistema → copie a URL Cron.
- Cadastre-se em cron-job.org (gratuito).
- 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:
- Vá em Email Accounts → crie, por ex.,
noreply@seudominio.com. - Edite o
.envno 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" - Salve, depois no AssetHub: Configurações → E-mail → Enviar e-mail de teste.
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 deDB_PASSWORDse 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.phpse existir, depois tente novamente. - Certifique-se de que
DB_CONNECTION=mysqlestá 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
.htaccessraiz existe e se o PHP é 8.2+. - Verifique
storage/logs/laravel.logpara ver o erro real. - Confirme que
APP_KEYestá 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
| Chave | Descrição | Exemplo |
|---|---|---|
APP_NAME | Nome da aplicação exibido na barra de título | AssetHub |
APP_URL | URL pública da sua instalação | https://assets.example.com |
APP_DEBUG | Defina como false em produção | false |
DB_* | Detalhes de conexão ao banco | mysql, 127.0.0.1, 3306, ... |
MAIL_MAILER | Driver de e-mail | smtp, log, mailgun |
MAIL_HOST | Hostname do servidor SMTP | smtp.gmail.com |
MAIL_PORT | Porta SMTP | 587 |
MAIL_USERNAME | Usuário SMTP | your@email.com |
MAIL_PASSWORD | Senha SMTP ou app token | ********** |
MAIL_FROM_ADDRESS | Endereço From padrão | noreply@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_subtitleem 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ódigo | Idioma | Direção |
|---|---|---|
en | English (default) | LTR |
vi | Tiếng Việt | LTR |
es | Español | LTR |
fr | Français | LTR |
de | Deutsch | LTR |
zh | 简体中文 | LTR |
ja | 日本語 | LTR |
pt-BR | Português (Brasil) | LTR |
ru | Русский | LTR |
ar | العربية | RTL |
hi | हिन्दी | LTR |
Como trocar de idioma
- Clique no ícone de bandeira (canto superior direito) para abrir o menu.
- Escolha seu idioma na lista.
- A página recarrega; todos os rótulos, datas e formatos de moeda mudam.
- Sua escolha é salva tanto na sua conta de usuário quanto em um cookie (1 ano).
/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.:
mkpara 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ção | Permissões |
|---|---|
| Admin | Acesso total ao sistema — usuários, departamentos, configurações, log de auditoria, webhooks, traduções |
| IT Manager | Gerenciar ativos (individuais + batch/lot), categorias, manutenção e solicitações; aprovar transferências; ver relatórios e depreciação |
| Contador | Gerenciar ativos e depreciação, executar auditorias de inventário, aprovar transferências e disposições, acesso completo a relatórios (foco financeiro) |
| Supervisor | Aprovar solicitações do departamento, gerenciar checkouts, participar de auditorias, ver relatórios |
| Funcionário | Ver 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
- Navegue até Ativos → Novo ativo.
- Preencha nome, categoria, marca, modelo, número de série.
- Adicione data de compra e preço (obrigatórios para depreciação).
- Envie imagens (vários arquivos suportados, máx. 5 MB cada).
- 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
- Clique em Importar na página de Ativos.
- Baixe o modelo Excel.
- Preencha seus dados — colunas obrigatórias:
name,category_name. - 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.
- Informe a quantidade e a unidade (peça, conjunto, caixa). Ao salvar, o estoque é colocado no pool do armazém.
- Abra o ativo → aba Allocations → Allocate para alocar unidades a um funcionário ou departamento.
- Use Return, Adjust (danificado/perdido/reparo) ou ações de disposição — o resumo em tempo real deve conciliar com a quantidade total.
- Ativos batch suportam apenas preço unitário; a depreciação é opcional e desativada por padrão para configuração mais rápida.
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
- Abra a página de detalhe de um ativo.
- Clique em Atribuir (visível se o ativo estiver disponível).
- Escolha um usuário, data de devolução opcional, notas.
- 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.
- Barra lateral → Disposals → New Disposal. Defina título e período (Q1–Q4, anual ou ad-hoc).
- Abra o rascunho → Add items — unidades batch danificadas elegíveis ou ativos individuais em condição Poor.
- Clique em Submit for approval — o lote é bloqueado.
- Um aprovador diferente clica em Approve & execute — ativos/unidades são marcados como disposed.
- Imprima o disposal minutes (PDF) para registros de conformidade.
Depreciação
O AssetHub calcula a depreciação dos ativos usando um de três métodos:
| Método | Fórmula | Caso de uso |
|---|---|---|
| Linha reta | (Cost - Salvage) / Useful Life | Mais comum; depreciação anual constante |
| Saldo decrescente | 2 / Useful Life × Book Value | Acelerada; para impostos |
| Unidades de produção | Baseado em uso | Equipamentos 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:
- Resumo de ativos — totais por status, condição, categoria, departamento
- Depreciação — perda de valor por categoria, ativos mais depreciados
- Transações — atividade de atribuição, devolução, transferência ao longo do tempo
- Custo de manutenção — gastos por mês, categoria, tipo
- Expiração de garantia — ativos que precisam atenção em 30/60/180 dias
- Ativos por departamento — distribuição de ativos e uso de orçamento por departamento
- Ativos por origem — distribuição entre compra, projeto, doação, transferência
- Resumo de auditoria de inventário — discrepâncias em ciclos periódicos de auditoria
- Atribuições a funcionários (v2) — quem possui o quê, incluindo alocações batch
- Departamento / Localização (v2) — ativos e quantidades por departamento ou localização
- Conciliação de inventário (v2) — estoque vs alocado vs danificado/perdido/disposed
- 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.deletedasset.assigned,asset.returned,asset.transferredrequest.created,request.approved,request.rejected,request.fulfilledmaintenance.scheduled,maintenance.started,maintenance.completedcheckout.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
| Hora | Comando | Propósito |
|---|---|---|
| Diário 08:00 | send-overdue-checkout-alerts | Lembretes por e-mail de checkouts em atraso |
| Diário 08:30 | send-maintenance-reminders | Lembretes de manutenção próxima |
| Diário 09:00 | send-document-expiry-alerts | Documentos vencendo em 30/14/7/1 dias |
| Diário 09:30 | send-warranty-alerts | Alertas de expiração de garantia + seguro |
| Diário 10:00 | assethub:send-depreciation-end-alerts | Alertas quando ativos chegam ao fim da vida útil |
| Diário 10:30 | send-inventory-audit-reminders | Lembretes para auditorias de inventário ativas |
| Mensal dia 1, 02:00 | update-asset-values | Atualizar 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.
- v3.1 → v4.0 — Full upgrade guide — Appearance settings, browser tab title from Branding. No migration required.
- v3.0 → v3.1 — Full upgrade guide — Visible languages checklist in navbar picker. No migration required.
- v2.x → v3.0 — Full upgrade guide — Translation Editor, custom locales, localization settings.
- v1.x → v2.0 — Full upgrade guide — Batch assets, disposals, public QR page, operational reports.
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.
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
- Laravel 11 — MIT
- Vue 3 — MIT
- Inertia.js — MIT
- Tailwind CSS — MIT
- Spatie Permission, Media Library, Activitylog — MIT
- Phosphor Icons — MIT (duotone weight)
- ApexCharts — MIT
- html5-qrcode — Apache 2.0
- Simple QrCode — MIT
- Laravel Excel — MIT
- Laravel DomPDF — MIT