{"id":49626253,"url":"https://github.com/robertomarchioro/prompt-a-porter","last_synced_at":"2026-06-14T22:02:33.184Z","repository":{"id":355581518,"uuid":"1227740029","full_name":"robertomarchioro/prompt-a-porter","owner":"robertomarchioro","description":"Libreria locale-first per prompt AI — vault cifrato, ricerca semantica offline, MCP-ready, AGPL 3.0","archived":false,"fork":false,"pushed_at":"2026-06-13T16:05:28.000Z","size":2303,"stargazers_count":0,"open_issues_count":0,"forks_count":1,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-06-13T16:26:23.909Z","etag":null,"topics":["agplv3","ai-tools","llm","local-first","mcp","prompt-engineering","prompt-library","rust","sqlite","svelte","tauri"],"latest_commit_sha":null,"homepage":"","language":"Rust","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"agpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/robertomarchioro.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":"CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":"SECURITY.md","support":null,"governance":null,"roadmap":"docs/roadmap/README.md","authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-05-03T05:14:59.000Z","updated_at":"2026-06-13T16:05:05.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/robertomarchioro/prompt-a-porter","commit_stats":null,"previous_names":["robertomarchioro/prompt-a-porter"],"tags_count":28,"template":false,"template_full_name":null,"purl":"pkg:github/robertomarchioro/prompt-a-porter","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/robertomarchioro%2Fprompt-a-porter","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/robertomarchioro%2Fprompt-a-porter/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/robertomarchioro%2Fprompt-a-porter/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/robertomarchioro%2Fprompt-a-porter/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/robertomarchioro","download_url":"https://codeload.github.com/robertomarchioro/prompt-a-porter/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/robertomarchioro%2Fprompt-a-porter/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":34339195,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-06-14T02:00:07.365Z","response_time":62,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["agplv3","ai-tools","llm","local-first","mcp","prompt-engineering","prompt-library","rust","sqlite","svelte","tauri"],"created_at":"2026-05-05T07:03:48.404Z","updated_at":"2026-06-14T22:02:33.170Z","avatar_url":"https://github.com/robertomarchioro.png","language":"Rust","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Prompt a Porter\n\n**Libreria locale e di team per prompt AI** — template parametrici, vault cifrato, sync opzionale.\n\n\u003e Il nome è un gioco su \"prêt-à-porter\": prompt pronti all'uso.\n\n## Cos'è\n\nPrompt a Porter (PaP) è un'app desktop local-first per knowledge worker che usano LLM quotidianamente. Permette di salvare prompt efficaci, renderli parametrici con segnaposti `{{nome}}`, compilarli in pochi secondi e copiarli nella chat AI di destinazione.\n\nNon è un'app cloud. È un'app desktop invocabile via hotkey globale (tipo Raycast/Alfred), con storage primario su un **SQLite cifrato** locale. Il sync con il team è opzionale e passa attraverso un server self-hosted minimale.\n\n## Funzionalità principali\n\n- **Command palette globale** — `Ctrl+Shift+P` (o `⌘⇧P` su macOS) per cercare e compilare prompt in pochi secondi\n- **Template parametrici** — segnaposti `{{nome}}` con tipi (testo, multilinea, enum), default e hint\n- **Vault cifrato** — SQLite + SQLCipher, AES-256, password mai persistita\n- **Libreria organizzata** — tag, preferiti, ricerca full-text, visibilità privata/team\n- **Sync team opzionale** — server Go self-hosted, WebSocket real-time, last-write-wins\n- **RBAC** — ruoli Admin / Editor / User per workspace team\n- **Cross-platform** — Windows 10+, macOS 12+, Linux\n\n## Stack tecnico\n\n| Componente | Tecnologia |\n|------------|------------|\n| Client desktop | Tauri 2.x (Rust) + Svelte 5 + TypeScript |\n| Editor prompt | CodeMirror 6 |\n| Storage locale | SQLite + SQLCipher |\n| Server sync | Go 1.22+, single binary |\n| Icone | Lucide (subset tree-shakable) |\n| Font | Sistema per UI, JetBrains Mono per codice |\n\n## Struttura del repository\n\n```\nprompt-a-porter/\n├── apps/\n│   ├── client/          ← Tauri + Svelte (app desktop)\n│   ├── server/          ← Go sync server\n│   ├── cli/             ← CLI Go pap\n│   └── mcp-server/      ← MCP server TypeScript\n├── packages/\n│   └── shared-schema/   ← Tipi TypeScript condivisi\n├── docs/                ← Documentazione tecnica (vedi sotto)\n├── spikes/              ← Crate/script di spike tecnici\n└── .github/workflows/   ← CI/CD\n```\n\n## Documentazione\n\n🌐 **Sito utente**: \u003chttps://robertomarchioro.github.io/prompt-a-porter/\u003e (build automatica da `main`)\n\n🧪 **Test plan**: [`docs/test/test-cases.md`](docs/test/test-cases.md) — 146 test cases manuali citabili nelle issue (`[TC-AUTH-003] ...`)\n\nLa documentazione tecnica è organizzata in 5 cluster sotto [`docs/`](docs/):\n\n| Cluster | Per chi |\n|---|---|\n| [`docs/utente/`](docs/utente/) | Chi usa PaP — CLI, MCP, formato export |\n| [`docs/contribuire/`](docs/contribuire/) | Chi contribuisce codice — setup ambiente |\n| [`docs/architettura/`](docs/architettura/) | Chi studia o estende il sistema — overview, schema dati, design system, ADR |\n| [`docs/roadmap/`](docs/roadmap/) | Maintainer e contributor che pianificano — fasi, rinvii, quality gate |\n| [`docs/operativo/`](docs/operativo/) | Chi deploya — guide di deploy |\n\nPunto di accesso: [`docs/README.md`](docs/README.md).\n\n## Setup sviluppo\n\n\u003e Documentazione dettagliata in [`docs/contribuire/setup-sviluppo.md`](docs/contribuire/setup-sviluppo.md).\n\n### Prerequisiti\n\n- Node.js 22.x LTS\n- pnpm 9.x+\n- Rust toolchain stable (per Tauri)\n- Go 1.22+ (per il server sync)\n\n### Quick start\n\n```bash\ngit clone https://github.com/robertomarchioro/prompt-a-porter.git\ncd prompt-a-porter\npnpm install\npnpm --filter @pap/client dev\n```\n\n## Stato del progetto\n\n- **Fase 1 (MVP)** ✅ completata (`v0.1.0-fase1`).\n- **Fase 2 (Foundations)** ✅ chiusa parziale (`v0.2.0-foundations` + patch line `v0.2.x`).\n- **Fase 3 (Intelligence)** ⏳ in preparazione, con 3 spike tecnici già chiusi.\n\nVedi [`CHANGELOG.md`](CHANGELOG.md) per i dettagli completi e [`docs/roadmap/`](docs/roadmap/) per la pianificazione.\n\n## Licenza\n\n**[GNU AGPL 3.0](LICENSE)** (Affero General Public License). Chiude il loophole SaaS — chi ospita il codice come servizio ha l'obbligo di pubblicare modifiche. Tutto il codice del progetto è libero, ispezionabile e portabile.\n\n## Autore\n\n**Roberto Marchioro** — ICT Manager\n\n---\n\n*Prompt a Porter — perché i prompt migliori meritano di essere riutilizzati.*\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Frobertomarchioro%2Fprompt-a-porter","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Frobertomarchioro%2Fprompt-a-porter","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Frobertomarchioro%2Fprompt-a-porter/lists"}