Lalabase
Tickets, Doku, Zeiterfassung und Kundengespräche an einem Ort, durchsuchbar per KI. Für Softwarefirmen mit Kundenprojekten. Open Source: auf deinem eigenen Server oder in unserer Cloud in Deutschland.
翻譯準備中
尚未偵測到更新。GitHub 發布版本後會顯示在這裡。
個人 GitHub 帳號下公開儲存庫的擁有者可以登入並驗證所有權,自行管理介紹,無需管理員核准。
登入並產生驗證檔案,在 30 分鐘內將其提交至此儲存庫的預設分支。其他分支或分叉儲存庫中的檔案無效。然後在下方檢查檔案,即可無需管理員核准直接管理專案。請保留檔案以維持管理權限。
如需登入,將前往登入頁面。登入後請回到此處,再次點擊所選的驗證按鈕。
在專案資料夾中執行 /nomorevibe verify,即可驗證所有權並自行管理介紹。
一分鐘完成驗證正在載入完整 README。 以下為已儲存的摘錄。
Repositório público, sem credenciais — hospeda o gerador do PDF do SIPAC usado no processo de submissão de software do NIT/CEFET-MG, publicado via GitHub Pages. Substituiu o script Python que antes vivia no repositório template e precisava ser instalado na máquina do docente. Navegador todo mundo já tem. Público, processando dado sensível — como isso se sustenta O formulário coleta CPF, endereço e telefone dos autores. Isso não é contradição com o repositório ser público, mas exige que uma propriedade seja verdadeira e continue verdadeira: nada do que é digitado sai do navegador.檢視完整 README ↗
Repositório público, sem credenciais — hospeda o gerador do PDF do SIPAC usado no processo de submissão de software do NIT/UFCIMG, publicado via GitHub Pages.
| Ferramenta | Arquivo | Para quê |
|---|---|---|
| Gerador do PDF do SIPAC — wizard em etapas | index.html (shell + biblioteca vendorizada) + app.js (lógica) + dados.js (tabelas do INPI, qualificações, campi, constantes) + estilos.css | O docente preenche em etapas — identificação, instituições parceiras, autores, classificação, artefato a proteger, declarações — e recebe o PDF pronto para anexar ao processo no SIPAC |
Substituiu o script Python que antes vivia no repositório template e precisava ser instalado na máquina do docente. Navegador todo mundo já tem.
O formulário coleta CPF, endereço e telefone dos autores. Isso não é contradição com o repositório ser público, mas exige que uma propriedade seja verdadeira e continue verdadeira: nada do que é digitado sai do navegador.
Não há backend. Não há chamada de rede. A biblioteca de geração de PDF está
vendorizada — colada dentro do próprio index.html, entre os marcadores
BEGIN VENDOR / END VENDOR — em vez de carregada de um CDN, justamente para
que nenhum terceiro possa trocar o código debaixo de nós. app.js,
dados.js e estilos.css são carregados só do próprio repositório
(script-src/style-src 'self' no CSP) — nunca de CDN. O PDF é montado
localmente e baixado direto.
Ser público é o que permite usar Pages em qualquer plano do GitHub (Pages a partir de repositório privado exige plano pago) e não expõe nada de ninguém: o que está publicado é o formulário vazio, não dado de submissão.
| Trava | Onde |
|---|---|
Content-Security-Policy com connect-src 'none' e script-src/style-src 'self' | meta tag no topo do index.html |
| Nenhuma referência externa fora do bloco vendorizado, em nenhum dos quatro arquivos | sem-rede.yml |
| Bloco vendorizado íntegro | hash fixado em vendor-pdf-lib.sha256 |
Nunca acrescente a estes arquivos: <script src> de CDN, link de webfont,
analytics, ou qualquer fetch. 'self' no CSP libera carregar app.js,
dados.js e estilos.css do próprio repositório — não abre a porta para nada
externo. O CI rejeita qualquer referência de rede fora do bloco vendorizado, e
a rejeição é o ponto.
O hash fixado existe porque ninguém revisa 500 KB de código minificado num diff — uma linha maliciosa enfiada ali passaria batida. Com o hash, atualizar a biblioteca exige trocar código e hash no mesmo commit, o que torna a intenção visível na revisão.
Settings → Pages → Source: Deploy from a branch → main → / (root).
Sem build. Editou index.html, app.js, dados.js ou
estilos.css, é só dar push.
pdf-lib.sourceMappingURL do fim — senão o navegador tenta
buscar o mapa de origem, que é exatamente a chamada de rede que não pode
existir.BEGIN VENDOR / END VENDOR, dentro de
index.html.sed -n '/BEGIN VENDOR/,/END VENDOR/p' index.html \
| sha256sum | awk '{print $1" index.html.vendor-block"}' > .github/vendor-pdf-lib.sha256
A suíte do repositório nit-softwares abre esta página num Chromium de
verdade, preenche o formulário inteiro, gera o PDF e confere o anexo embutido,
o bloco sentinela e a ausência de qualquer requisição de rede:
testes/rodar.sh
O formulário é a fonte dos dados que vão ao SIPAC e ao INPI, e não é gerado a
partir de schema nenhum — se as exigências do processo mudarem (campo novo,
validação diferente), é edição à mão aqui. O metadata.json do repositório de
submissão ficou propositalmente mínimo e não espelha este formulário; os
dois respondem perguntas diferentes.
Dados constantes e de autocomplete (tabelas de Área de Aplicação/Tipo de
Programa do INPI, qualificações profissionais, campi da UFCIMG, o prefixo
GITHUB_ORG, a versão do formato VERSAO_FLUXO) ficam isolados em
dados.js — é o único arquivo a mexer para atualizar essas listas. A lógica do wizard (etapas, validação por campo,
geração do PDF) fica em app.js.
VERSAO_FLUXO)O JSON embutido no PDF (submissao.json + bloco sentinela) e o do "Salvar
rascunho" carregam versao_fluxo, cujo valor vem da constante VERSAO_FLUXO
em dados.js. Ela existe para a interoperabilidade entre versões: um PDF
fica décadas no SIPAC, então a extensão do NIT (que lê esse PDF do lado do
SIPAC) e o "Carregar rascunho" vão receber JSON de versões antigas e precisam
saber qual formato têm nas mãos.
A regra, a partir da primeira publicação (hoje ainda é ensaio, e o formato mudou várias vezes sem trocar o número):
Hoje nenhum leitor consulta o número: o "Carregar rascunho" aceita qualquer
JSON sem olhar versao_fluxo, e a extensão ainda não lê esta parte. Isso basta
enquanto só existe um formato em circulação; o primeiro corte incompatível
depois da publicação é a hora de fazer os leitores ramificarem pela versão.
index.html entre BEGIN VENDOR e END VENDOR, com hash fixado em .github/vendor-pdf-lib.sha256.licencas/font-awesome.txt.