EM ANDAMENTO
Resumo técnico
Plugin NEXUS que integra o Meilisearch (search engine open-source, self-hosted em Docker) para busca full-text typo-tolerant sobre tarefas e plugins — com autocomplete, filtros (status, projeto, prioridade), sorting e indexação em lote ou pontual via auto-index, sem custo por busca.
Escopo executado
plugin.json: v1.0.0, slugmeilisearch, categoria "Search" (aba Search & Discovery, íconesearch,is_core: false).- Stack self-hosted: instância Meilisearch via Docker Compose exposta em
http://127.0.0.1:7700— sem custo por busca; Master Key configurável no painel. - Config (
DB::getConfig('plugin.meilisearch')):api_url(defaulthttp://127.0.0.1:7700,rtrim '/'),master_key(nunca exposta — apenasmaster_key_maskedsubstr(0,4)…substr(-4)+ flagmaster_key_set),auto_index(true),enabled(true),indexes(['tasks','plugins']). - HTTP (
meili_request) — cURL com método custom eAuthorization: Bearer <key>; timeout 60s, connect 5s; erro extraído dedata.message. - Health (
meilisearch_dashboard) —/health(online = status 'available'),/version,/stats,/indexes?limit=50, buscas recentes (30) e último índice, tudo em um payload. - Índices (
meili_ensure_index) — cria viaPOST /indexescomuid+primaryKey(409 = já existe), aplicaPATCH /settingse aguarda cada task (poll/tasks/{uid}a cada 200ms). - IDs seguros (
meili_safe_id) — a primary key do Meilisearch aceita só[a-zA-Z0-9_-]; IDs NEXUS contêm.e viram_, com onexus_idoriginal preservado no doc (fallbackdoc_<md5>). - Documentos — tasks:
id,nexus_id,seq,title,description(strip_tags, 8000),notes(2000),project,priority,status,holding,created_at,updated_at,type; plugins:name,slug,description,category,version,author,active,type. - Indexação (
meilisearch_index) —what: all|tasks|plugins,limitopcional, upload em chunks de 500 docs aguardando cada task (timeout 90s); metalast_index(at, indexed, what, errors) persistida. - Auto-index (
meili_index_one_task) — indexação pontual na API interna respeitandoenabled+auto_index; a leitura de tarefa em si é no-op (legacy filter desativado — evita flooding do índice). - Busca (
meilisearch_search) —q,index(whitelisttasks/plugins),limit1–50 (default 20),offset, filtroANDcom escaping (status/projectstrings,priorityint,activebool), sort default:desc; hits de tasks retornamnexus_idcomoid(commeili_idguardado); buscas recentes deduplicadas porindex|q(máx 40) eestimatedTotalHits+processingTimeMsno resultado. - Sugestões (
meilisearch_suggest) — top 8–10; tasks com label#seq título(+ status/projeto), plugins comnome (slug)e valor = slug. - Fastr
/search(meilisearch_fastr) — markdown no comentário: lista numerada (pluginsnome (slug) — categoria; tasks#seq título — status · projeto+id:), rodapé_hits≈N · Xms_. - API: 6 actions (
meilisearch_dashboard,meilisearch_search,meilisearch_suggest,meilisearch_index,meilisearch_settings_save,meilisearch_fastr). - UI Alpine.js (
tab.php) — tema slate (cinza + acentoscyan-600), aba Search & Discovery; badge Online/Offline; 4 stats cards (Índices, Docs DB, Tasks idx, Plugins idx); 4 sub-abas (Busca, Índices, Indexar, Configurações); busca com highlight, dicas quando o índice está vazio, botão Indexar tudo e Master Key mascarada nas configurações. - Sem cron, sem migrations, sem modais e sem i18n (textos em português).
- tasks: searchable title, description, notes, project, nexus_id, id · filterable status, project, priority, holding, type · sortable updated_at, created_at, priority, seq. - plugins: searchable name, slug, description, category, author · filterable category, active, type · sortable name, slug.
Stack e ferramentas
- PHP 8 (sem framework)
- MySQL 8 (config via
DB::getConfig('plugin.meilisearch')+ buscas recentes) - Alpine.js + Tailwind CSS (premium light, slate/cyan)
- cURL (timeout 60s, connect 5s, Bearer auth)
- Meilisearch API (self-hosted,
http://127.0.0.1:7700—/health,/version,/stats,/indexes,/tasks,/search) - Plugin NEXUS (PluginManager: tabs, API actions, Fastr, filters)
Tags operacionais
- Meilisearch
- Full-Text Search
- Typo Tolerance
- Autocomplete
- Search Engine
- Self-Hosted
- Plugin NEXUS
Resultado operacional
- Busca instantânea e tolerante a erros: typo-tolerance nativa do Meilisearch com destaque nos campos, filtros e sorting — sem custo de API.
- Indexação em dois modos: lote completo (tasks/plugins/all, chunks de 500) ou pontual via auto-index a cada alteração de tarefa.
- Zero exposição de segredo: Master Key nunca sai do backend (apenas máscara
XXXX…XXXXno painel). - Retorno amigável: hits de tasks voltam com
nexus_idcomoid(omeili_idsanitizado fica preservado). - Rastreabilidade: buscas recentes deduplicadas (30 no dashboard) e meta de cada indexação (
last_index). - Slash
/searchno chat: resultados markdown no comentário com contagem e tempo de processamento.
Andamento no GitHub (issues)
Painel em tempo real com as issues mais recentes do repositório.
live feed
abrir issues no githubcarregando andamento...
não foi possivel carregar as issues agora. abra no github pelo link acima.
Resultados reais
Plugin NEXUS que integra o Meilisearch (search engine open-source, self-hosted em Docker) para busca full-text typo-tolerant sobre tarefas e plugins — com autocomplete, filtros (status, projeto, prioridade), sorting e indexação em lote ou pontual via auto-index, sem custo por busca.
Arquitetura e organização
- PHP 8
- MySQL 8
- Alpine.js
- Tailwind CSS
- cURL
- Meilisearch API
- Plugin NEXUS
Execução e operação
O projeto segue fluxo reprodutível de execução com validação técnica em ambiente de produção/similar.
Screenshots
Falar sobre este projeto
Aplique este modelo no seu ambiente e acelere a entrega com consistência técnica.