Privacy & security
What data we collect, why, how we process it — and how the underlying system is built, so you can judge for yourself whom to trust and whom not to. Tone: written for a lawyer who wants to understand before using.
⚠️
Courtesy English translation — Italian version prevails. The authoritative text is the Italian one at
skillagram.ai/privacy.html; in case of any discrepancy, the Italian version governs.
Skillagram is a social network for lawyers: you sign up, you share agents, prompts, skills and plugins for legal AI, you follow colleagues, you join communities, you message each other privately. Lawyers review the contributions and report cases where an AI got Italian law wrong. It is not a commercial service, and the AI is not sold. It is part of the RegIA / BeccarIA family, but it is a prototype run by the author as a natural person.
Part 1 — Privacy
Data controller
Michele Loi — author and maintainer of the prototype, acting as a natural person (this is not a commercial service; there is no company behind it).
- Privacy contact and exercise of your rights:
micheleloi@skillagram.ai
- The "Need to remove some content?" form delivers to the same address
What personal data we collect
When you browse the public pages
The public pages (the home page, the catalog of contributions, the Try it sandbox) are readable without an account. While you are only browsing:
- No third-party analytics. The site does not use Google Analytics, Meta Pixel, Hotjar or any tracking service. There is no tracking cookie.
- Your browser stores some state information locally on your device (language, active community, an anonymous identifier so the same review isn't voted twice). It stays in your browser; the full list is in Cookies and browser memory.
- The server hosting the site (easyname VPS, in Vienna — Austria, EU) records, like any web server, the technical metadata of requests, including the IP address (not anonymized). Access logs are kept for about 14 days, then automatically deleted.
When you create an account and sign in
To publish, chat, follow colleagues, save skills or join a community you need an account. Skillagram is login-first: reading the catalog is open, but participation goes through signing in. Sign-in is without a password to remember, in two ways:
- Magic link by email — you enter your email, you receive a link that signs you in. Supabase manages an encrypted credential server-side internally; you neither create nor type a password, and no password lives in your browser.
- Sign in with Google — if you choose this route, Google returns to us your email, name and photo. Email verification is handled internally by the authentication infrastructure (Supabase); it is not data your profile stores or shows. It's your choice: anyone who doesn't want to involve Google uses the magic link.
What we keep about the account: your email (it is your sign-in identity) and an internal user identifier. The sign-in session is stored in the browser's localStorage so you stay logged in between visits.
Your public profile
On first signup you create a profile. These are public and visible to anyone:
- Display name — required. There is no verification that it matches your real name.
- Profile photo (avatar) — requested at profile creation (the interface won't let you save without one). It lives in public storage.
- Handle (
@username) — generated automatically, then fixed.
- Bio, firm, LinkedIn profile — optional; if filled in, public.
When you publish a contribution, it links back to your profile: your name and avatar always accompany what you share.
When you message a colleague privately (chat)
Chat (1:1) is the point on which you must be informed precisely, because here confidentiality has an honest technical boundary:
- Messages are stored in clear text on our servers (Supabase PostgreSQL database). Chat is NOT end-to-end encrypted.
- Who can read them, normally: only the two participants, by rules on the database (Row Level Security).
- Who can read them, technically: the maintainer, because they hold the database's administrative key (
service_role) that overrides those rules. It is a real technical possibility and we tell you instead of hiding it. It is the same model as Slack, LinkedIn or Instagram: server-readable, declared.
- When you write to a guide bot (Avv. Demo Rossi, Avv.ssa Demo Bianchi), the message content and the latest exchanges are sent to Anthropic (Claude) to generate the reply. This is not the "nothing leaves your browser" sandbox: here the message passes through a server and reaches an external provider. Anthropic acts as a data processor (Claude commercial API): API data is not used for training and is kept ~30 days; the DPA is incorporated into the Commercial Terms. US transfer covered by SCCs.
⚠️ For your professional secrecy, do not paste into chat (nor to the bots) identifying or confidential client data. Chat is meant for exchange between colleagues about skills, prompts and method — it is not a channel for case material. If you need to discuss a real case, pseudonymize it first with Recode IT (remove identifying data): the legal question stays discussable, the names don't. Professional secrecy is your duty (art. 28 of the Italian Forensic Code of Conduct; art. 622 of the Italian Criminal Code), and on a channel readable by the operator it is you who protects it, not encryption.
When you publish a contribution (agent / prompt / skill / plugin)
We save what you put in the form. All of this is public on the site: title, description, full content, legal area, type, chosen licence (which governs reuse by others), any GitHub link, any legal references. The contribution is linked to your profile (public name + avatar).
- For plugins: the
.zip file upload is not active: the form only records the file name as text, no file is uploaded or stored. To share a plugin, use a GitHub link.
Publishing requires being signed in.
When you write a review or report an AI error
- Name (from your profile). You publish while logged in: the contribution is yours and you edit or delete it from your profile (no more email links).
- Content (stars + text for reviews; prompt + wrong answer + correction + references for reports). For error reports the content is public: pseudonymize the case first (remove identifying data).
- Contributions are always signed. Skills, reviews and error reports go out under your name from your profile (while logged in): the "Publish without my name" option is no longer available. We keep the name for moderation and to be able to contact you, and we do not promise it is untraceable. Real confidentiality is about the case, not your name: pseudonymize it with Recode. (Some legacy contributions, from before this choice, may still appear unsigned.)
- Report confirmations: if you confirm a colleague's report, the confirmation is signed with your name (from your profile, while logged in) and is public; you delete it from your profile.
When you try a prompt or skill in the sandbox ("Try it")
This is the most privacy-preserving point, and the reason the sandbox can say "nothing leaves your browser". The Try it page runs a prompt/skill using your API key, on your text. When you press Run:
- The call goes directly from your browser to the AI provider you choose. It does not pass through Skillagram's servers. We see neither the key, nor the text, nor the answer.
- Your API key is kept only in
sessionStorage and is deleted when you close the tab.
- Selectable providers: Anthropic (Claude), OpenAI, DeepSeek, Google Gemini, Mistral and a custom endpoint ("Other"). To support them all, the Content-Security-Policy allows connections to any HTTPS host — no longer just two fixed domains. The guarantee that matters stays: no Skillagram proxy, a single destination per run (verifiable in DevTools → Network), public, inspectable code.
When you send the case text to the AI provider, the relationship is between you and that provider. Some have datacenters outside the EU (e.g. DeepSeek, China). That's why: always pseudonymize the case first with Recode (remove identifying data). In the BYO-key sandbox that responsibility is yours.
When you follow, block, save, join a community
- Follows (who you follow / who follows you): public.
- Blocks: private — the person you block doesn't know.
- Bookmarks (saved skills): private, visible only to you.
- Joining a community: the roster is public. On first signup you are added to the default community ("Diritto").
When you vote "Helpful"
The vote increments the counter. To prevent double votes from the same browser, we store a locally generated anonymous string. It is not your IP, not your name, not directly linked to you.
Maintainer notifications
For every new profile and every newly published skill, the system sends an email to the maintainer (via Resend) with a few summary fields plus a link. Fields sent — new profile: display name (+ handle), firm if any, profile link; new skill: type, title, author, area if any, skill link. No email and no IP address are included. It serves to know what enters the platform and to be able to moderate. It does not fire on new messages, reviews or reports.
When you use the "Removal request" form
The form opens your email client pre-filled and you send the email yourself to micheleloi@skillagram.ai. You reveal your email to us voluntarily with that action; it is not stored in the site's database.
Why we process this data (legal basis)
- Account, sign-in and chat: contractual necessity to provide the service (art. 6(1)(b) GDPR) + your consent on signup (art. 6(1)(a)).
- Publishing contributions/reviews/reports: explicit consent at submit (art. 6(1)(a)), with full awareness that it goes live.
- AI guide bots: the bots only respond on topics related to the platform's functioning and purpose. Legal basis: your choice to write to a bot (art. 6(1)(a) GDPR); we still invite you to pseudonymize (remove identifying data) any personal data.
- "Try it" sandbox (BYO-key): we process no data — the key and the text never reach us. The processing is between you and the AI provider.
- Maintainer notifications + hosting + backup + anti-abuse: the maintainer's legitimate interest in running and moderating the prototype (art. 6(1)(f)).
- No marketing, no profiling, no automated decision-making.
How long we keep it
- Account (email + identifier): indefinitely while the account exists. To delete it: from your profile (the "Delete my account" panel, with double confirmation) or write to us.
- Profile, contributions, reviews, reports: indefinitely while they exist; you edit or delete them from your profile (while logged in). If you delete your account, the contributions you published are not deleted with it: they stay online unsigned (detached from the account) — delete them from your profile first if you don't want to leave them. For content published by others, write to us at micheleloi@skillagram.ai.
- Avatars: while the profile exists. (Plugin zips are not stored: the upload is not active.)
- Chat messages: kept for at most 6 months, then automatically deleted by a daily job (storage limitation, GDPR art. 5.1.e — less data retained, less exposure in a breach). In any case, if you delete your account the messages you sent are removed (cascade) even earlier; the other participant's messages remain until the 6-month expiry.
- Reviews and reports: tied to your account; we do not collect a separate email for them. You edit or delete them from your profile (while logged in).
- "Helpful" vote: indefinitely (anonymous pair).
- "Try it" sandbox: we keep nothing.
- VPS access logs (with IP): about 14 days (automatic rotation), then deleted. Supabase authentication logs: managed by the Supabase platform per its own policy.
Where the data lives (recipients)
To run the service we rely on the recipients below. Where data leaves the European Economic Area (EEA), the transfer is covered by the safeguards indicated (the EU Commission's Standard Contractual Clauses — "SCCs" — and/or the EU-US Data Privacy Framework — "DPF").
- Supabase, Inc. (US) — data processor. Database, authentication and storage. The Postgres database is hosted in the EU region (Ireland, eu-west-1) and stays there; however, technical logs and some realtime components are processed in the US. Extra-EU transfer covered by SCCs.
- Anthropic, PBC (US) — data processor. Generates the AI assistant ("guide-bot") replies via the Claude commercial API. API data is not used for training; standard input/output retention is 30 days (longer only for content flagged for safety). Extra-EU transfer covered by SCCs.
- Resend, Inc. (US) — data processor. Sends transactional email (maintainer notifications and, in future, "new follower" notifications). All data, including email metadata and logs, is stored in the United States, regardless of the selected sending region. Transfer covered by the EU-US Data Privacy Framework (DPF), with SCCs as a fallback safeguard.
- easyname GmbH (Austria, EU) — data processor. Hosting/VPS. The server is physically located in Vienna (Austria), i.e. within the EU. Web server access logs (which include the visitor's IP address) are kept for about 14 days. No extra-EU transfer.
- Google LLC (US) — independent controller (not our processor). Only if you choose "Sign in with Google". In this flow Google acts as an independent controller: it receives and returns your email, name and profile photo under its own privacy terms. Google LLC is EU-US Data Privacy Framework (DPF) certified, with SCCs as a fallback safeguard.
A separate case — "bring your own key" (BYO-key) AI sandbox. In the Try it sandbox you may select third-party AI providers (Anthropic, OpenAI, DeepSeek, Google Gemini, Mistral or a custom endpoint), some outside the EU. In that case those providers are not our recipients: your browser sends the data directly to the provider using your own key, under your responsibility and subject to the terms of the provider you choose. One more reason to pseudonymize first (e.g. DeepSeek, China).
Your rights
- Access your data — what you have published is already visible; for a machine-readable export, write to us.
- Rectify — you edit or delete your contributions (skills, articles, reviews, reports) from your profile, while logged in.
- Erase — you delete your account yourself, from your profile ("Delete my account"); content from your profile or on request by writing to us.
- Object / restrict — there is no marketing, profiling or automated decision-making.
- Portability — on request.
- Complaint to the Italian Data Protection Authority (Garante per la protezione dei dati personali, garanteprivacy.it).
To exercise a right, write to micheleloi@skillagram.ai. Typical response time: 2-5 business days (it's a prototype run in spare time).
Cookies and browser memory
The site sets no HTTP cookies and uses no third-party tracking cookies. It uses the browser's local memory (localStorage/sessionStorage) to function:
skillagram.auth — your sign-in session, to stay logged in between visits.
skillagram_lang — the chosen language (it/en).
skillagram_active_community — the active community.
skillagram_lang_redirected — technical anti-loop flag for language redirection; dies when the tab closes.
skillagram_key_<provider> — your API key in the sandbox; dies when the tab closes; never reaches us.
- "Helpful" vote identifier — an anonymous string to prevent the same browser voting twice.
All first-party memory, no analytics. It clears by wiping the site's data.
Minors
The prototype is intended for legal professionals. In Italy the age for independent digital consent to information-society services is 14 (art. 8 GDPR, lowered by Italian Legislative Decree 101/2018); consistently, we do not knowingly collect data of minors under 14. If you notice that a piece of content concerns a minor or was published by a minor, report it to us at micheleloi@skillagram.ai.
Changes to this page
If the providers or the purposes of processing change, this page is updated. The site's code is public (AGPL-3.0) and the history of changes is inspectable in the repository.
Part 2 — Security (the architecture underneath)
The idea: explained so that, even without being a developer, you can understand whom you depend on when you use the site, where the risk sits, and why certain things were done a certain way.
1. The site you see (frontend)
Static HTML pages + JavaScript and CSS, served from an easyname VPS (deploy via rsync; skillagram.ai domain).
- Public AGPL-3.0 repo: you can verify line by line what the site does.
- Login-first access: catalog and sandbox public, but to participate you need an account. The session is recognized between visits (token in
localStorage).
- The "Try it" sandbox does not pass through a server of ours: the browser talks directly with the chosen AI provider, with your key (in
sessionStorage, which dies when the tab closes). The Content-Security-Policy allows connections to HTTPS hosts (for multiple providers + a custom endpoint): no Skillagram proxy, a single destination per run, verifiable in DevTools.
- No Google Analytics, Meta Pixel, Hotjar, fingerprinting.
2. The database + storage + authentication
A PostgreSQL managed by Supabase, region Ireland (eu-west-1, EU). It holds accounts, profiles, contributions, reviews, reports, chat messages (in clear text), follows/blocks/bookmarks/communities, votes, error-report confirmations. Storage holds avatars (public-read space); plugin zips are neither uploaded nor stored (the upload is not active).
- Authentication managed by Supabase Auth (magic link by email + Google OAuth). No password typed or stored on the browser side.
- Row Level Security (RLS): explicit rules on the database. Chat is readable only by the two participants; public contributions are readable by everyone and editable/deletable only by their author; blocks and bookmarks are private.
- The browser uses a public key (publishable key): security is not in hiding it, it is in the RLS.
- A secret key exists (
service_role) that overrides RLS. It lives only in the Edge Functions + in the maintainer's drawer. It is this that makes chat messages technically readable by the maintainer — a declared fact, not hidden.
3. The AI guide bots
The profiles Avv. Demo Rossi and Avv.ssa Demo Bianchi are bots: when you write to them, an Edge Function (demo-reply) sends your message + the latest exchanges to Anthropic (Claude). The Anthropic key is a backend secret, never exposed to the browser. There is a limit (10 replies per conversation) and a rate limit. It is server-side processing: it is not the zero-server sandbox.
4. Email sending
Resend sends the maintainer notifications about new profiles/skills. No newsletter, no marketing. The Resend API key is a project secret.
5. Chat notifications
An unread-message badge, toast alerts, browser notifications (opt-in) and real-time updates via Supabase Realtime. They serve to know when a message arrives; they are not a newsletter nor tracking.
What is not there (by choice)
- No Google Analytics, Meta Pixel, Hotjar.
- No "sign in with Facebook" (sign-in is magic link or Google).
- No newsletter, CRM, marketing, profiling, automated decision-making.
- No HTTP tracking cookies.
- In the BYO-key sandbox, no server of ours in the middle.
What you should know if you want to discuss a real case
This applies to error reports, to chat and to the guide bots:
⚠️ Do not paste names of clients, opposing parties, case-file numbers or identifying personal data. Pseudonymize the case first (remove identifying data).
To reduce risk we recommend Recode IT (recode.micheleloi.pro). Recode runs entirely in your browser — it sends nothing to external servers. It replaces real names with consistent pseudonyms (e.g. Mario Rossi → Tizio) and lets you reverse-substitute. Note the concept: this is pseudonymization, not anonymization — the text remains personal data under the GDPR. It serves to reduce risk (especially in a breach) and to document your diligence, not to remove your obligations. The protection is of the case, not your name: contributions are now always signed.
Trust model: whom you trust when you use this site
In order of criticality:
- The prototype's maintainer (Michele Loi) — holds the
service_role key and can technically see/modify/delete what is in the database, including chat messages. He does not have access to what you do in the BYO-key sandbox (key, text, answer): it never reaches him.
- Supabase as processor (database, auth, storage); Ireland region (EU).
- Anthropic when you use the guide bots, and Resend for email.
- Google if you choose "Sign in with Google".
- The AI providers in the sandbox — only when you use it, and only for the data you send them.
- easyname, which hosts the site (sees the IP that downloads the pages).
Skillagram's trust model is not "we are a closed, private circle": it is "the code is open, the architecture is inspectable, and we tell you precisely what is readable and by whom". You trust the verifiability and the honesty of the boundary, not our word.
Honest limits
- It is a prototype run in spare time. No SLA, no uptime guarantee.
- Chat is not end-to-end encrypted (the guide bots must read the message to reply, and server-side reading serves notifications and moderation). For case material, pseudonymize.
- No ISO 27001, SOC 2 certification.
- No formal bug bounty, but security reports are welcome.
- Providers' free/entry tiers: high volumes could introduce rate limits.
How to report a security problem
If you find a security bug (e.g. reading/modifying others' messages without consent, extracting private emails, a SQL injection or XSS, or a way for the sandbox to send data to a destination other than the chosen one):
- Do not exploit it. Not even out of curiosity.
- Send an email to
micheleloi@skillagram.ai with subject "Security report — Skillagram" and a step-by-step description. Wait for a reply before discussing it publicly.
- We give credit in the fix commits to whoever reports (or anonymity, if you prefer).
Courtesy English translation of the Italian privacy notice; the Italian version prevails.