window._plenaProvider = 'gemini'; window._plenaApiKey = 'AIzaSyA4NvZfD4p4phxI5FP-rTGov2Pumk6JUkU'; LEGIBLA · PLENA — Is this clause the kind that gets challenged in your country
Translating page…
PLENA
VERITA ASCENDA LEGIBLA FORTIA PROVA NAVIGA DIGITA DETECTA AEQUITA TEMPORA
Demo
🌐 English Français Español Português Deutsch عربي Swahili हिन्दी Русский 中文 Bahasa فارسی
📄 Not What It Says. What It Can Legally Say.

You Shouldn't Need a Law Degree
to Know What You're Agreeing To.

Every contract has clauses designed to confuse you. Every lease has terms that protect the landlord. Every loan has conditions that cost you. LEGIBLA decodes them — before you sign, when you still have power.

📚 What LEGIBLA Is
AI explains contracts well. What it cannot do is check clauses against current local law and flag what is commonly unenforceable, prohibited, or legally contested in your specific jurisdiction. LEGIBLA is a document literacy tool — not a law firm. It explains what documents say in plain language. For any document with significant financial or legal consequences, have a licensed attorney review it before you sign.
Paste your contract. Get the 3 things that could hurt you — in 60 seconds.
Who are you today?
✅ Before You Sign — 10-Point Checklist
Any box unchecked = a question to ask before signing. If you are being pressured to sign without time to check — that itself is a warning sign.
>
📄
Contract Decoder
Paste any contract. LEGIBLA explains every clause in plain language — what it means, what it commits you to, and what you are giving up.
Free
⚠️
Danger Clause Detector
Automatically identifies unfair, unusual, or dangerous terms — non-compete clauses, automatic renewals, liability waivers, and hidden penalties.
Free
🤝
Negotiation Guide
Tells you exactly which clauses to push back on, what to ask for, and how to phrase your negotiation — professionally and effectively.
Premium
🌐
Document Translator
Received a legal document in a language you do not speak? LEGIBLA translates and explains it simultaneously — in your language.
Free
🎯
Document Risk Review
LEGIBLA gives your document a Document Risk Review — Fair, Proceed with Caution, or Review carefully before signing — with a clear explanation of why.
Premium
✉️
Response Letter Generator
Generate a formal, professional response to any contract, legal notice, or demand letter — negotiating terms, disputing claims, or declining.
Premium
🌐
TOS Analyser
Paste any website URL. LEGIBLA fetches the Terms of Service or Privacy Policy and returns a plain-language Nutrition Label — data resale, arbitration, auto-renewal, and more.
Free

🏛️ For Universities, NGOs, Employers & Government Departments

Help your students, staff, beneficiaries, and citizens understand every document they receive. Institutional plans available from $49/month. UN and government procurement packages available.

LEGIBLA is a document literacy tool — not a legal service and not a law firm. LEGIBLA explains documents in plain language to help you understand what you are reading. It does not constitute legal advice specific to your situation and does not replace a qualified lawyer. The legal effect of any contract clause depends on the specific facts and the laws of your jurisdiction — only a licensed attorney can advise you on your specific situation.

High-stakes documents: For employment contracts, property purchases, loan agreements, and business contracts above any significant value, always have a licensed attorney review the document before you sign. LEGIBLA is a starting point — not a final check.

USA — Loan Agreements: Under the Truth in Lending Act (TILA), your lender is legally required to disclose the APR and total cost of credit to you before you sign. LEGIBLA's explanation does not replace that mandatory disclosure.

USA — Unauthorized Practice of Law: LEGIBLA is a literacy tool, not a law firm. It is not authorised to practise law in any US state. Nothing on this platform is legal advice. LEGIBLA explains what documents say in plain language — it does not apply law to your specific facts or recommend a course of action. That distinction — between legal information (permitted) and legal advice (requires a bar licence) — is the foundation of LEGIBLA's design. Courts in Colorado, Utah, Alaska, and other jurisdictions have confirmed that general legal information tools fall outside UPL statutes. The landmark Nippon Life v. OpenAI case (filed March 2026) is the first UPL action against a general-purpose AI provider and will help clarify this area of law further — it does not affect LEGIBLA's model, which does not provide advice for specific disputes.

EU — AI-Generated Content: Responses generated by LEGIBLA are produced by an AI system. Under EU AI Act Article 50 (applicable from 2 August 2026), users in the European Union are informed that this content is AI-generated. Always verify important information with a qualified professional.
Who LEGIBLA is for
Every document you sign has consequences. LEGIBLA makes sure you understand them first.
🏠
The tenant signing a lease
The landlord\'s lawyer wrote this contract. You are signing it alone.
Leases contain automatic renewal clauses, hidden fees, and liability traps written to protect landlords. LEGIBLA reads every clause, explains what it means, and flags anything unusual — before you sign.
💼
The employee receiving an offer
Your employment contract has a non-compete clause. You do not know what it means.
Non-compete agreements, IP assignment clauses, and probation terms can affect your career for years. LEGIBLA explains every clause in plain language so you know what you are agreeing to.
🏦
The borrower taking a loan
The interest rate is clear. The 47 other clauses are not.
Loan agreements, mortgage documents, and credit contracts are designed to be long and complex. LEGIBLA identifies the real cost, the penalty clauses, and the exit conditions you need to understand before you commit.
📱
Anyone receiving a legal notice
You received a formal letter. You do not know if it is serious.
Demand letters, notices of default, and legal correspondence use language designed to intimidate. LEGIBLA explains what the document actually says, what it requires from you, and what your options are.
"I signed the lease because I didn't want to seem difficult. I discovered the automatic renewal clause six months too late."
LEGIBLA exists because understanding what you sign should not require a law degree.
⚖️ Document needs professional review?
All legal help →
Law Help — Free Legal Help (USA)
Free · Employment · Housing · Family · Consumer · Official
Free help →
Citizens Advice — Free Legal Help (UK)
Free · All civil matters · In person and online
Free help →
Rocket Lawyer — Attorney Document Review
Licensed attorneys review your document · USA & UK
Attorney review →
Free resources always listed first. PLENA receives referral fees on paid services only.
💬 Get help on messaging apps
WhatsApp Telegram

Message PLENA directly on WhatsApp or Telegram — same knowledge, any app. Free. Requires a free AI key on first use.

← All Platforms
⚡ Being handed something right now?

Paste any contract, lease, or notice below — LEGIBLA explains it instantly. No account needed.

📄 847,000 contracts decoded
⚠️ 124,000 danger clauses found
💬 4.2 avg clauses users didn't understand
Works with every document type
📋 Employment Contract 🏠 Rental Lease 💳 Loan Agreement 🛡 Insurance Policy 📝 Freelance Contract 🤐 NDA 🏛 Government Notice 🏥 Medical Consent
Real Story

"LEGIBLA found a £2,400 automatic renewal clause buried in paragraph 11 of my gym contract. I cancelled before it triggered." — Maria, London

← Back
⚙️
Unlock Full AI Analysis
Demo Mode works instantly for everyone — no setup. For deep, clause-specific AI analysis, connect a free provider in under 60 seconds.
⚡ Fastest path — free in 60 seconds
1. Open console.groq.com ↗ — sign up free, 30 seconds
2. Click API KeysCreate API Key → copy it
3. Select Groq below, paste your key — done
Get Groq key ↗
← All Services
📄
Contract Decoder
Paste any contract — employment, rental, loan, insurance, service agreement. LEGIBLA reads every clause and explains exactly what it means in plain language.
Reading your contract and preparing a plain-language explanation…
📄
Contract Explanation
General literacy information only — not legal advice. This explanation is for your understanding only. The legal effect of contract clauses varies by jurisdiction and the specific facts of your situation. LEGIBLA is not a law firm and this is not legal advice. For contracts involving property, significant sums of money, employment with non-compete clauses, or any document with major legal consequences, consult a licensed attorney before signing.
← All Services
⚠️
Danger Clause Detector
LEGIBLA scans your document for clauses that are unfair, unusual, or potentially dangerous — and explains exactly why each one is a concern.
📷 Paper-to-Plain — Scan a physical document

Take a photo or upload an image of your contract. LEGIBLA extracts the text locally on your device — nothing is uploaded to any server.

Scanning for unfair and dangerous terms…
⚠️
Danger Clause Report
✏️ Redline Assistant — Get replacement language

Paste any dangerous clause from the report above. LEGIBLA will write a fairer replacement you can send back to the other party.

Note: What is considered "unfair" varies by jurisdiction. LEGIBLA provides general guidance. For legally binding disputes about contract terms, consult a lawyer in your country.
← All Services
🤝
Negotiation Guide
Tell LEGIBLA what contract you are dealing with and what concerns you. LEGIBLA tells you exactly what to ask for, how to phrase it, and what leverage you have.
Preparing your negotiation strategy…
🤝
Negotiation Strategy
Note: Negotiation success depends on your specific situation, market conditions, and the other party. LEGIBLA gives you the strategy — you deliver it.
← All Services
🌐
Document Translator
Received a legal document in a language you do not fully understand? LEGIBLA translates it AND explains it simultaneously — not just word for word, but meaning for meaning.
Translating and explaining your document…
🌐
Translation & Explanation
Note: LEGIBLA provides explanatory translation — the meaning of the document in your language. For certified legal translation required by courts or government bodies, use a certified human translator.
← All Services
🎯
Document Risk Review
LEGIBLA identifies clauses that raise concerns, explains what they mean, and gives you specific questions to resolve — so you can make your own informed decision. LEGIBLA does not tell you whether to sign.
Reviewing clauses and identifying concerns…
🎯
Document Risk Review
LEGIBLA identifies concerns — it does not advise you whether to sign. The decision to sign any document is yours alone. This review is based on general principles and the text provided. The legal effect of any clause depends on your jurisdiction and the specific facts of your situation. For employment contracts, property transactions, loan agreements, and any document with significant financial or legal consequences, have a licensed attorney review it before you sign.
← All Services
✉️
Response Letter — Draft Starting Point
LEGIBLA gives you a draft starting point for responding to contracts, notices, or demand letters. Review and personalise every draft carefully before sending. For legal notices involving court proceedings or significant sums, have a licensed attorney review your response first.
Drafting your professional response letter…
✉️
Response Letter
Note: Review this letter carefully before sending. Adjust names, dates, and specific details as needed. For legal disputes involving significant sums or court proceedings, have a lawyer review the letter first.
← All Services
🚨
Quick Check

You are about to sign something right now. You don't have time for a full analysis. Paste the contract — LEGIBLA gives you the 3 most critical things to check before the pen touches paper.

📷 Have a physical contract? Scan it instantly
⚠️ Remember

If you are being pressured to sign immediately and told you cannot take the document home — that itself is a red flag. In most jurisdictions, you have the right to take a copy and seek advice. If they refuse, consider not signing.

← All Services
📋
Obligation Timeline

You signed. Now extract every commitment — payment dates, renewal windows, notice deadlines — into a visual timeline so nothing catches you off guard.

📄 Extract obligations from your contract
📌 Manual Obligation Tracker
← Back
LEGIBLA Pricing

Understanding what you sign should not cost a fortune. Start free — upgrade when you need the full power of LEGIBLA.

Free
$0
Forever
  • Contract Decoder
  • Danger Clause Detector
  • Document Translator
  • Demo AI engine
  • 12 languages
  • Negotiation Guide
  • Document Risk Review Score
  • Response Letter
  • Real AI engine
  • ⚡ Community Clause Flagging
  • 🔍 Deadline Calculator
  • ✅ Before You Sign checklist
Personal
$9.99/mo
per month
  • All 6 services
  • Real AI engine
  • Negotiation Guide
  • Document Risk Review Score
  • Response Letter Generator
  • Unlimited documents
  • 12 languages
  • All document types
Institutional
$49/mo
per month
  • Everything in Personal
  • Up to 50 users
  • Staff contract literacy
  • Bulk document processing
  • API access
  • Custom branding
  • PLENA bundle

Compare: A lawyer charges $200–$500/hour to read a contract. A single lease review costs $300–$800. LEGIBLA Personal costs $9.99/month — for unlimited documents, all year.
Regional pricing for Africa and the Global South coming soon — starting at $1.99/month.

← Back
📄
About LEGIBLA
"The lawyer you never had — for every document you never understood."

The Problem We Solve

Every day, billions of people sign documents they do not understand. Employment contracts with clauses that strip their rights. Rental leases with unlimited rent increases buried in paragraph 14. Loan agreements with penalty clauses written in language no ordinary person could parse. Insurance policies that exclude exactly the situation they are most likely to face.

They sign because they need the job. Because they need the apartment. Because they need the loan. Because refusing to sign seems impossible. And because they do not have a lawyer.

"The most powerful people in the world never sign anything without legal counsel. Everyone else signs and hopes. LEGIBLA changes that."

What LEGIBLA Is

LEGIBLA is a document literacy platform. It reads contracts, leases, loans, insurance policies, and legal notices — and explains them in plain language, in your language, before you sign.

LEGIBLA does not give legal advice. It gives you understanding — so you can make informed decisions, negotiate from knowledge, and never again be surprised by what you agreed to.

Who LEGIBLA Serves

Everyone who signs anything. An immigrant signing their first employment contract in a country whose legal system they do not know. A student signing a rental lease for the first time. A small business owner signing a service agreement. A patient signing a medical consent form. A worker receiving a redundancy notice. A tenant receiving an eviction letter.

LEGIBLA also serves institutions — universities helping students understand financial aid agreements, NGOs helping beneficiaries understand programme contracts, employers building staff literacy around HR documents, and government departments making legal notices accessible to citizens.

⚡ Enhanced Tools

⚡ Advanced Tools

Upload a contract PDF. LEGIBLA extracts the text and runs a full plain-language analysis. Your file never leaves your device.

Save contract versions over time. Paste the text of each version to track how it changes through negotiation.

Part of PLENA

LEGIBLA is part of the PLENA suite. VERITA proves who you are. ORIGINA protects what you created. ASCENDA proves what your degree is worth. LEGIBLA makes sure you understand everything you sign. Together — the complete suite for every professional, creator, and citizen who deserves better tools.

← Back
🏛
For Institutions
Academic institutions, employers, legal aid bodies, hospitals, and government agencies — deploy LEGIBLA at scale for your communities, students, or beneficiaries.

What institutional access includes:

  • ✓ Admin dashboard — usage reporting, user management, audit trails
  • ✓ Bulk user onboarding — CSV upload or API provisioning
  • ✓ Data Processing Agreement (GDPR / UK GDPR compliant)
  • ✓ SSO/SAML integration for enterprise IT environments
  • ✓ White-label option for your brand
  • ✓ Annual invoicing compatible with procurement systems
  • ✓ Dedicated support and SLA
Universities & Higher Education
Support international students, researchers, and staff. Deploy as part of orientation, welfare, or student services.
Legal Aid & Advocacy Bodies
Multiply the reach of your services. Give clients the documentation tools, rights knowledge, and literacy they need before their appointment.
Employers & HR Teams
Support international hires, reduce employment disputes, and ensure every employee understands their rights and contracts from Day 1.
Government & Integration Bodies
Support communities you serve. Equip citizens, newcomers, and beneficiaries with the knowledge they need to access services and understand their rights.
Request Institutional Access

Contact us with your institution type, approximate user count, and intended use. We respond within 2 business days.

Contact for Institutional Access →

⚡ Additional Tools

Upload a PDF contract. LEGIBLA extracts the text using PDF.js and automatically identifies risky clauses.

Drop a PDF contract or click to select

Add important clause deadlines to watch — notice periods, review dates, auto-renewal windows.

');w.document.close();}; })();
🚩 Round 3 — Community Clause Flags
When you flag a dangerous clause in LEGIBLA, your flag (anonymously) joins a community knowledge base. When others analyse similar contracts, LEGIBLA can warn them about clause patterns that real users have flagged as predatory — without any server, using P2P storage.

🧠 Round 4 — Contract Intelligence

Tools that go beyond reading your contract — they calculate your financial exposure, check what protections are missing, measure who the contract favours, plan your exit, and write your negotiation scripts.

Paste your contract. LEGIBLA scans every clause for penalties, fees, auto-renewals, notice periods, liability caps, and hidden costs — then calculates your maximum financial exposure in one number.

Every contract type has standard protections that should be there. LEGIBLA checks what's absent — the clauses that protect you that were never included.

Who does this contract really favour? LEGIBLA scores each clause and shows you an overall power balance meter — from "strongly favours the other party" to "balanced" to "favours you."

You already signed. Now you want out. LEGIBLA analyses termination clauses, cooling-off periods, notice requirements, and penalty calculations to give you a concrete exit plan.

Not just "push back on clause 7" — LEGIBLA writes you word-for-word scripts you can use in person, by email, or in a meeting. Professional, non-confrontational, and effective.

`);w.document.close();}; renderCorr(); window.checkReadiness=function(){var clauses=document.getElementById('lg2-ready-clauses').value.trim(),addressed=document.getElementById('lg2-ready-addressed').value,type=document.getElementById('lg2-ready-type').value;if(!clauses)return alert('List the flagged clauses.');ai('Assess whether this person should sign this '+type+' based on their negotiation status.\n\nFlagged clauses: '+clauses+'\nNegotiation status: '+addressed+'\n\n1. VERDICT: Cleared to sign / Proceed with caution / Do not sign without further negotiation\n2. REMAINING RISKS: What risks remain based on the flagged clauses\n3. WHAT TO DO FIRST: If not ready to sign, exactly what steps to take before signing\n4. IF FORCED TO SIGN: What to document or request in writing\n\nBe direct and specific.',document.getElementById('lg2-ready-out'),document.getElementById('lg2-ready-btn'));}; function renderHistory(){var items=JSON.parse(localStorage.getItem('lg2_versions')||'[]'),el=document.getElementById('lg2-history-list');el.innerHTML=items.length?items.map((it,i)=>`
${it.label} · ${it.date}
${it.changes}
`).join(''):''} window.saveVersion=function(){var label=document.getElementById('lg2-v-label').value.trim(),date=document.getElementById('lg2-v-date').value,changes=document.getElementById('lg2-v-changes').value.trim();if(!label)return alert('Enter a version label.');var items=JSON.parse(localStorage.getItem('lg2_versions')||'[]');items.unshift({label,date:date||new Date().toLocaleDateString(),changes});localStorage.setItem('lg2_versions',JSON.stringify(items));renderHistory();['lg2-v-label','lg2-v-changes'].forEach(id=>document.getElementById(id).value='');}; window.delVer=function(i){var items=JSON.parse(localStorage.getItem('lg2_versions')||'[]');items.splice(i,1);localStorage.setItem('lg2_versions',JSON.stringify(items));renderHistory();}; renderHistory(); function renderWatchlist(){var items=JSON.parse(localStorage.getItem('lg2_watchlist')||'[]'),el=document.getElementById('lg2-watch-list'),today=new Date();el.innerHTML=items.length?items.map((it,i)=>{var dl=new Date(it.date),days=Math.round((dl-today)/(864e5)),c=days<0?'#ff6b6b':days<=14?'#f97316':days<=30?'#f5c842':'#3ecf8e';return`
${days<0?'PASSED':days+' days'} — ${it.clause}
${it.action} · ${it.date}
`;}).join(''):''} window.saveWatchitem=function(){var clause=document.getElementById('lg2-w-clause').value.trim(),date=document.getElementById('lg2-w-date').value,action=document.getElementById('lg2-w-action').value.trim();if(!clause||!date)return alert('Enter clause reference and date.');var items=JSON.parse(localStorage.getItem('lg2_watchlist')||'[]');items.push({clause,date,action});items.sort((a,b)=>new Date(a.date)-new Date(b.date));localStorage.setItem('lg2_watchlist',JSON.stringify(items));renderWatchlist();['lg2-w-clause','lg2-w-date','lg2-w-action'].forEach(id=>document.getElementById(id).value='');}; window.delWatch=function(i){var items=JSON.parse(localStorage.getItem('lg2_watchlist')||'[]');items.splice(i,1);localStorage.setItem('lg2_watchlist',JSON.stringify(items));renderWatchlist();}; renderWatchlist(); })();
← All Services
🌐
Terms of Service Analyser
Every time you click "I Agree," you sign a contract. Paste the URL of any website's Terms of Service or Privacy Policy — LEGIBLA reads it and gives you a plain-language Nutrition Label in seconds.
🔗 Paste any Terms of Service or Privacy Policy URL
Common platforms — click to load:
📋 Or paste the TOS text directly (if the URL doesn't work)
← All Services
⚖️
Negotiation Sandbox

Paste a dangerous clause. See LEGIBLA's fair version. Edit either side in real time. The Power Meter shows you how the balance of power shifts with every word.

Pro-Employer Paste a clause to start Pro-You
0 — Fully one-sided 50 — Balanced 100 — Fully protected
Original clause
Fair version — edit freely

How to use the Sandbox: Paste the original clause on the left, click Generate for a fair version, then edit the right panel freely. When you are satisfied, copy the fair version and email it back to the other party with a short note: "I have a suggested revision to Clause X — please see attached."

← All Services
Deadline Calculator

Legal deadlines are not guidelines — miss one and you lose your right to act. Pick your country and dispute type and LEGIBLA gives you the exact window and the law behind it.

These are general statutory deadlines — your specific situation may have different rules. Employment Tribunal deadlines in the UK, for instance, have very limited extension discretion. When in doubt, act earlier than the deadline and consult a lawyer.

← All Services
Community Clause Library

Clauses that real users flagged as dangerous — searchable by contract type, country, and industry. If you have seen a clause that hurt you, flag it here. If you are about to sign, search here first.

🚩 Flag a dangerous clause
← All Services
🏛
Institution Hub

Bulk processing, template comparison, custom risk profiles, contract vault, approval workflows, and audit trails — built for universities, hospitals, law firms, and corporations.

Quick Actions
Recent Activity
Expiry Calendar — Next 60 Days
How it works

Paste multiple contracts separated by ---CONTRACT--- on its own line. LEGIBLA analyses each one and gives a risk summary for the whole batch.

Analysing all contracts in the batch…
📦
Batch Analysis Report

Paste your institution's standard contract template and the contract under review. LEGIBLA identifies every deviation — missing protections, added obligations, and changed language.

Comparing contract against your standard template…
📐
Template Deviation Report

Define your institution's risk rules. These are applied automatically across all AI analyses in the Institutional Hub — every Bulk Analyse, Template Compare, and Vault review will flag violations against this profile.

Standard Risk Rules

Select the red lines your institution automatically flags in any contract:

Custom Red Flags
+ Add Contract to Vault
Institutional Memory — Quick Queries
Institutional Memory — Quick Queries
Workflow Templates

Select a template to pre-fill the approval form with the correct chain for common contract types.

Workflow Templates

Select a template to pre-fill the approval form with the correct chain for common contract types.

Approval Workflow

Send a contract through a review chain. Status updates are tracked in the Audit Trail.

Pending Reviews
Audit Trail

Every action is timestamped and attributed. This log cannot be edited.

Manage who has access to your organisation's LEGIBLA workspace. Roles control what each person can see and do.

Admin
Full access. Manage users, branding, risk profiles, delete contracts.
Reviewer
Approve, flag, or reject contracts. View full vault and audit trail.
Signer
Add contracts to vault, sign off. Cannot approve or flag.
Viewer
Read-only. Sees approved and signed contracts only.
Current Team
Invite a Team Member

A temporary password will be generated. In production, this triggers an email invitation. For now, copy the password from the popup and share it securely.

Export-ready documents for regulatory submission, board meetings, and IT procurement sign-off. These are the outputs that make LEGIBLA evidence rather than just a tool.

⚖️
Compliance Report
Formatted audit trail with cover page, methodology note, and timestamp certification. Suitable for CQC, SRA, HEFCE, or internal governance submissions.
📊
Executive / Board Pack
One-page portfolio summary with risk heatmap, expiry calendar, and approval velocity. Designed to be printed or shared as a PDF for board meetings.
🖥️
IT Security Pack
Data flow diagram, auth architecture, data residency statement, and SSO setup instructions — everything your IT department needs to formally approve LEGIBLA.
Risk Profile — Version Control

Export your risk profile as a JSON file to share with partner institutions, import from a peer organisation, or restore a previous version.

Institutional Onboarding Checklist

Export-ready documents for regulatory submission, board meetings, and IT procurement sign-off. These are the outputs that make LEGIBLA evidence rather than just a tool.

⚖️
Compliance Report
Formatted audit trail with cover page, methodology note, and timestamp certification. Suitable for CQC, SRA, HEFCE, or internal governance submissions.
📊
Executive / Board Pack
One-page portfolio summary with risk heatmap, expiry calendar, and approval velocity. Designed to be printed or shared as a PDF for board meetings.
🖥️
IT Security Pack
Data flow diagram, auth architecture, data residency statement, and SSO setup instructions — everything your IT department needs to formally approve LEGIBLA.
Risk Profile — Version Control

Export your risk profile as a JSON file to share with partner institutions, import from a peer organisation, or restore a previous version.

Institutional Onboarding Checklist

Live portfolio intelligence drawn from your Contract Vault. Add contracts to the vault to see data here.

Risk Breakdown
Status Distribution
Contracts by Type
Expiry Timeline
🤖 AI Portfolio Insights

LEGIBLA analyses your entire vault and surfaces patterns, hidden risks, and recommended actions.

White-label LEGIBLA as your institution's own contract review tool. Changes apply immediately across the entire app.

Live Preview
'); w.document.close(); setTimeout(function(){ w.print(); }, 400); }; (function(){ function setLang(lang){ var menu = document.getElementById('lsMenu'); if(menu) menu.classList.remove('open'); location.href = location.pathname + (lang === 'en' ? '' : '?lang=' + lang); } function toggleLS(e){ e.stopPropagation(); var menu = document.getElementById('lsMenu'); if(menu) menu.classList.toggle('open'); } document.addEventListener('click', function(){ var menu = document.getElementById('lsMenu'); if(menu) menu.classList.remove('open'); }); // Expose globally window.setLang = setLang; window.toggleLS = toggleLS; // Highlight active language in dropdown (function highlightActive(){ var m = location.search.match(/[?&]lang=([^&]+)/i); var cur = m ? m[1].toLowerCase() : 'en'; var label = document.getElementById('lsLabel'); if(label && cur !== 'en') label.textContent = cur.toUpperCase(); document.querySelectorAll('.lang-opt[onclick]').forEach(function(btn){ var match = (btn.getAttribute('onclick') || '').match(/setLang\(\'([^']+)\'\)|setLang\("([^"]+)"\)|setLang\('([^']+)'\)/); var code = match ? (match[1]||match[2]||match[3]) : null; if(code && code === cur) btn.classList.add('active'); }); })(); })(); })(); '); w.document.close(); setTimeout(function(){ w.print(); }, 400); }; /* ── Executive / Board Governance Pack ── */ window.generateGovernancePack = function() { var vault = getVaultSync(); var brand = null; try { brand = JSON.parse(localStorage.getItem('legibla_brand')||'null'); } catch(e){} var orgName = (brand && brand.name) ? brand.name : 'Institution'; var now = new Date(); var today = now; var in30 = new Date(today.getTime() + 30*86400000); var in60 = new Date(today.getTime() + 60*86400000); var high = vault.filter(function(c){return (c.risk||c.risk_level)==='high';}).length; var approved = vault.filter(function(c){return c.status==='Approved';}).length; var expiring30 = vault.filter(function(c){ var d=new Date(c.expiry||c.expiry_date); return d>=today&&d<=in30; }).length; var pending = vault.filter(function(c){return c.status==='Under Review';}).length; /* Risk by dept */ var deptRisk = {}; vault.forEach(function(c){ var d = c.department||c.dept||'Unassigned'; if(!deptRisk[d]) deptRisk[d]={high:0,medium:0,low:0,total:0}; var r=c.risk||c.risk_level||'medium'; deptRisk[d][r]=(deptRisk[d][r]||0)+1; deptRisk[d].total++; }); /* Expiry heat */ var months = {}; vault.forEach(function(c){ var exp = c.expiry||c.expiry_date; if(!exp) return; var d=new Date(exp); if(din60) return; var k = d.getFullYear()+'-'+String(d.getMonth()+1).padStart(2,'0'); months[k]=(months[k]||0)+1; }); var deptRows = Object.keys(deptRisk).map(function(d){ var dr = deptRisk[d]; var barW = Math.round((dr.high/Math.max(dr.total,1))*100); return ''+escD(d)+''+dr.total+'' + '
' + (dr.high?''+dr.high+' high':'')+ (dr.medium?''+dr.medium+' med':'')+ (dr.low?''+dr.low+' low':'')+ '
'; }).join(''); var monthBars = Object.keys(months).sort().map(function(k){ var n=months[k]; var p=Math.round((n/Math.max.apply(null,Object.values(months)))*60)+20; var parts=k.split('-'); var lbl=['Jan','Feb','Mar','Apr','May','Jun','Jul','Aug','Sep','Oct','Nov','Dec'][parseInt(parts[1])-1]+' '+parts[0].slice(2); return '
' + '
'+n+'
' + '
' + '
'+lbl+'
'; }).join(''); var w = window.open('','_blank'); w.document.write('Board Governance Pack — '+orgName+'' + '' + '
' + '

Board Governance Pack

' + '
'+escD(orgName)+' · Contract Portfolio · '+now.toLocaleDateString('en-GB',{month:'long',year:'numeric'})+'
' + '
'+(brand&&brand.initials?escD(brand.initials):'LG')+'
' + '

Portfolio at a Glance

' + '
' + '
'+vault.length+'
Total Contracts
' + '
'+high+'
High Risk
' + '
'+pending+'
Pending Review
' + '
'+expiring30+'
Expiring (30d)
' + '
' + '

Risk Exposure by Department

' + (Object.keys(deptRisk).length ? ''+deptRows+'
DepartmentContractsRisk Breakdown
' : '

No department data — tag contracts with a department in the vault.

') + '

Expiry Calendar — Next 60 Days

' + (Object.keys(months).length ? '
'+monthBars+'
' : '

No contracts expiring in the next 60 days.

') + '

Recommended Board Actions

' + (high > 0 ? '
URGENT '+high+' high-risk contract(s) require review or renegotiation before next renewal.
' : '') + (expiring30 > 0 ? '
ACTION '+expiring30+' contract(s) expire within 30 days — initiate renewal or termination process immediately.
' : '') + (pending > 0 ? '
REVIEW '+pending+' contract(s) are awaiting approval — assign reviewers and set deadlines.
' : '') + (vault.filter(function(c){return !c.expiry&&!c.expiry_date;}).length > 0 ? '
INFO '+vault.filter(function(c){return !c.expiry&&!c.expiry_date;}).length+' contract(s) have no expiry date recorded — update the vault to enable renewal tracking.
' : '') + (high===0&&expiring30===0&&pending===0 ? '
OK No urgent actions required at this time.
' : '') + '

Generated by LEGIBLA Institutional · '+now.toLocaleString()+' · This document is an operational summary for internal governance purposes only. It does not constitute legal advice.

' + ' '); w.document.close(); setTimeout(function(){ w.print(); }, 400); }; /* ── IT Security Pack ── */ window.generateITPack = function() { var brand = null; try { brand = JSON.parse(localStorage.getItem('legibla_brand')||'null'); } catch(e){} var orgName = (brand && brand.name) ? brand.name : 'Institution'; var apiBase = window.LEGIBLA_API || 'http://localhost:3000'; var w = window.open('','_blank'); w.document.write('IT Security Pack — LEGIBLA Institutional' + '' + '

IT Security & Architecture Pack

' + '

Prepared for: '+escD(orgName)+' IT / Information Security · '+new Date().toLocaleDateString()+'

' + '

Application Overview

' + '
Application name
LEGIBLA Institutional
' + '
Application type
Self-hosted web application (Node.js)
' + '
Data residency
All data stored on your own infrastructure. No data sent to LEGIBLA servers.
' + '
Internet dependency
AI analysis calls go to the AI provider configured by your team (Groq, OpenAI, Anthropic, etc). All other features work offline.
' + '
Current backend URL
'+escD(apiBase)+'
' + '

Authentication & Access Control

' + '
Auth mechanism
JWT (JSON Web Tokens), 7-day expiry, signed with org-specific secret
' + '
Password storage
bcrypt hashed (cost factor 12) — plaintext never stored
' + '
SSO — Google Workspace
OAuth2 PKCE flow via Google Identity Platform. Activate by registering in Google Cloud Console.
' + '
SSO — Microsoft Entra ID
OAuth2 via Microsoft Identity Platform. Activate by registering in Azure portal.
' + '
Role-based access
4 roles: Admin, Reviewer, Signer, Viewer. Enforced server-side on every endpoint.
' + '
Organisation isolation
Each organisation\'s data is fully isolated. No cross-organisation data access is possible.
' + '

Data Storage

' + '
Database
SQLite (single file, stored on your server). No external database service required.
' + '
Data transmitted externally
Contract text is sent to your chosen AI provider (Groq/OpenAI/Anthropic) for analysis. Your IT team should approve the AI provider separately.
' + '
Backup
Copy the .db file. Recommended: nightly backup to your institutional storage.
' + '

Network & Infrastructure

' + '
Recommended deployment: Place behind an nginx or Caddy reverse proxy with TLS termination. The Node.js server should not be exposed directly to the internet.
' + '

SSO Activation — Quick Reference

' + '

Google Workspace: Register at console.cloud.google.com → APIs & Services → Credentials → OAuth2 Client ID (Web). Callback: https://yourdomain.com/api/auth/google/callback

' + '

Microsoft Entra ID: Register at portal.azure.com → Azure AD → App registrations. Callback: https://yourdomain.com/api/auth/microsoft/callback

' + '

LEGIBLA Institutional — IT Security Pack — '+new Date().toLocaleString()+'

' + ' '); w.document.close(); }; /* ════════════════════════════════════════ RISK PROFILE VERSIONING ════════════════════════════════════════ */ window.exportRiskProfile = function() { var p = null; try { p = JSON.parse(localStorage.getItem('legibla_profile')||'null'); } catch(e){} if(!p) return alert('No risk profile saved yet. Configure one in the Risk Profile tab first.'); p._exported = new Date().toISOString(); var blob = new Blob([JSON.stringify(p, null, 2)], {type:'application/json'}); var url = URL.createObjectURL(blob); var a = document.createElement('a'); a.href = url; a.download = 'legibla_risk_profile_'+new Date().toISOString().slice(0,10)+'.json'; a.click(); /* Save version to history */ var versions = []; try { versions = JSON.parse(localStorage.getItem('legibla_profile_versions')||'[]'); } catch(e){} versions.unshift({ ts: new Date().toISOString(), profile: p }); localStorage.setItem('legibla_profile_versions', JSON.stringify(versions.slice(0,10))); renderRPVersionList(); }; window.importRiskProfile = function(input) { var file = input.files[0]; if(!file) return; var reader = new FileReader(); reader.onload = function(e) { try { var p = JSON.parse(e.target.result); localStorage.setItem('legibla_profile', JSON.stringify(p)); alert('Risk profile imported from '+file.name+'.\nType: '+(p.type||'—')+', Jurisdiction: '+(p.jurisdiction||'—')+', Rules: '+((p.selectedChips||[]).length)); renderRPVersionList(); } catch(err) { alert('Invalid JSON file: '+err.message); } }; reader.readAsText(file); }; function renderRPVersionList() { var el = document.getElementById('rp-version-list'); if(!el) return; var versions = []; try { versions = JSON.parse(localStorage.getItem('legibla_profile_versions')||'[]'); } catch(e){} var current = null; try { current = JSON.parse(localStorage.getItem('legibla_profile')||'null'); } catch(e){} if(!current && !versions.length) { el.innerHTML='

No profile saved or exported yet.

'; return; } var html = ''; if(current) { html += '
' + '
Active Profile
' + '
'+(current.type||'—')+' · '+(current.jurisdiction||'—')+' · '+((current.selectedChips||[]).length)+' rules' + (current.saved?' · Saved '+new Date(current.saved).toLocaleDateString():'')+ '
'; } if(versions.length) { html += '
Export history:
'; html += versions.map(function(v){ return '
' + ''+new Date(v.ts).toLocaleDateString()+'' + ''+escD(v.profile.type||'—')+''+escD(v.profile.jurisdiction||'—')+'' + ''+((v.profile.selectedChips||[]).length)+' rules' + '' + '
'; }).join(''); } el.innerHTML = html; } window.restoreProfileVersion = function(ts) { var versions = []; try { versions = JSON.parse(localStorage.getItem('legibla_profile_versions')||'[]'); } catch(e){} var v = versions.find(function(x){ return x.ts === ts; }); if(!v) return alert('Version not found.'); if(!confirm('Restore this profile version from '+new Date(ts).toLocaleDateString()+'? Current profile will be overwritten.')) return; localStorage.setItem('legibla_profile', JSON.stringify(v.profile)); renderRPVersionList(); alert('Profile restored.'); }; /* ════════════════════════════════════════ ONBOARDING CHECKLIST ════════════════════════════════════════ */ function renderOnboardingChecklist() { var el = document.getElementById('onboarding-checklist'); if(!el) return; var vault = getVaultSync(); var profile = null; try { profile = JSON.parse(localStorage.getItem('legibla_profile')||'null'); } catch(e){} var brand = null; try { brand = JSON.parse(localStorage.getItem('legibla_brand')||'null'); } catch(e){} var audit = []; try { audit = JSON.parse(localStorage.getItem('legibla_audit')||'[]'); } catch(e){} var steps = [ { done: !!(brand && brand.name), label: 'Set institution name and branding', action: "instTab('brand')", tab: 'Branding tab' }, { done: !!(profile && profile.type), label: 'Configure sector risk profile', action: "instTab('profile')", tab: 'Risk Profile tab' }, { done: vault.length > 0, label: 'Add first contract to the vault', action: "instTab('vault')", tab: 'Contract Vault tab' }, { done: vault.filter(function(c){return c.expiry||c.expiry_date;}).length > 0, label: 'Set expiry dates on vault contracts', action: "instTab('vault')", tab: 'Contract Vault tab' }, { done: audit.filter(function(e){return e.action && e.action.includes('Invited');}).length > 0 || audit.filter(function(e){return e.action && e.action.toLowerCase().includes('invite');}).length > 0, label: 'Invite at least one team member', action: "instTab('team')", tab: 'Team tab' }, { done: audit.filter(function(e){return e.action && (e.action.includes('Approve') || e.action.includes('Flag') || e.action.includes('Review'));}).length > 0, label: 'Run first approval workflow', action: "instTab('approvals')", tab: 'Approvals tab' }, { done: audit.filter(function(e){return e.action && e.action.includes('Audit');}).length > 0 || audit.length > 5, label: 'Generate first compliance report', action: "generateComplianceReport()", tab: 'above' }, ]; var done = steps.filter(function(s){return s.done;}).length; el.innerHTML = '
' + '
' + '
' + '
'+done+' / '+steps.length+' complete
' + steps.map(function(s){ return '
' + '
'+(s.done?'✅':'⭕')+'
' + '
' + s.label + '
' + (!s.done ? '' : '') + '
'; }).join(''); } /* ════════════════════════════════════════ ONBOARDING WIZARD ════════════════════════════════════════ */ var _wizardStep = 0; var _wizardData = {}; var WIZARD_STEPS = [ { title: 'What type of institution are you?', render: function() { return '
' + ['University / Higher Education','Hospital / Healthcare','Law Firm','Corporation','NGO / Non-Profit','Government'].map(function(t){ var key = t.split('/')[0].trim().toLowerCase().replace(/ /g,''); var sel = _wizardData.sector === key; return ''; }).join('') + '
'; } }, { title: 'Name your institution', render: function() { return '
' + '
' + '
' + '
'; } }, { title: 'Apply a risk profile', render: function() { var sector = _wizardData.sector || 'university'; return '

We\'ve pre-selected the most common risk rules for a '+sector+'. You can customise these in the Risk Profile tab later.

' + '
'; }, onMount: function() { var CHIPS = { university: ['IP ownership transfer','Research data sharing','Unlimited indemnification','Auto-renewal >12 months','GDPR / data processor clause'], hospital: ['Patient data sharing','HIPAA / GDPR breach liability','Supplier sole-supplier lock-in','IP on clinical innovations','Unlimited consequential damages'], lawfirm: ['Conflicts of interest clause','Client data confidentiality waiver','Non-solicitation >12 months','IP rights on work product'], corporation: ['Unlimited liability exposure','IP assignment to contractor','Non-compete >6 months','Change of control provisions'], ngo: ['Donor restriction violations','Restricted funding compliance','Beneficiary data sharing'], government: ['Data sovereignty clauses','Freedom of information waivers','Public procurement compliance','Unlimited indemnification'] }; var chips = CHIPS[_wizardData.sector] || CHIPS.university; _wizardData.selectedChips = chips.slice(); var container = document.getElementById('wizard-chips'); if(container) { container.innerHTML = chips.map(function(chip){ return '
⚑ '+escD(chip)+'
'; }).join(''); } } }, { title: "You're set up.", render: function() { return '
' + '
🏛
' + '

' + 'LEGIBLA is configured for '+escD(_wizardData.orgName||'your institution')+'.
' + 'Your risk profile and branding have been saved.
Next step: add your first contract to the vault.

' + '

You can refine everything in the Risk Profile and Branding tabs.

'; } } ]; function renderWizardStep() { var step = WIZARD_STEPS[_wizardStep]; var dots = document.getElementById('wizard-step-dots'); if(dots) dots.innerHTML = WIZARD_STEPS.map(function(_,i){ return '
'; }).join(''); var body = document.getElementById('wizard-body'); if(body) { body.innerHTML = '
'+step.title+'
' + step.render(); if(step.onMount) setTimeout(step.onMount, 30); } var back = document.getElementById('wizard-back-btn'); if(back) back.style.display = _wizardStep > 0 ? '' : 'none'; var next = document.getElementById('wizard-next-btn'); if(next) next.textContent = _wizardStep === WIZARD_STEPS.length-1 ? 'Go to Vault →' : 'Continue →'; } window.wizardPick = function(key, val, btn) { _wizardData[key] = val; btn.closest('div').querySelectorAll('button').forEach(function(b){ b.style.background='var(--bg3)'; b.style.borderColor='var(--bord2)'; b.style.color='var(--text)'; }); btn.style.background='rgba(200,146,42,.15)'; btn.style.borderColor='var(--amber)'; btn.style.color='var(--amber)'; }; window.wizardNext = function() { if(_wizardStep === WIZARD_STEPS.length-1) { applyWizardData(); dismissWizard(); instTab('vault'); return; } _wizardStep++; renderWizardStep(); }; window.wizardBack = function() { if(_wizardStep > 0) { _wizardStep--; renderWizardStep(); } }; function applyWizardData() { /* Apply branding */ if(_wizardData.orgName) { var b = {}; try { b = JSON.parse(localStorage.getItem('legibla_brand')||'{}'); } catch(e){} b.name = _wizardData.orgName; b.dept = _wizardData.dept||''; b.initials = (_wizardData.orgName.substring(0,2)).toUpperCase(); localStorage.setItem('legibla_brand', JSON.stringify(b)); if(window.applyBranding) setTimeout(window.applyBranding, 100); } /* Apply risk profile */ if(_wizardData.sector) { var p = {}; try { p = JSON.parse(localStorage.getItem('legibla_profile')||'{}'); } catch(e){} p.type = _wizardData.sector; p.name = _wizardData.orgName||''; p.selectedChips = _wizardData.selectedChips||[]; p.saved = new Date().toISOString(); localStorage.setItem('legibla_profile', JSON.stringify(p)); } } window.dismissWizard = function() { var el = document.getElementById('onboarding-overlay'); if(el) el.style.display = 'none'; localStorage.setItem('legibla_wizard_done','1'); }; function maybeShowWizard() { var done = localStorage.getItem('legibla_wizard_done'); var vault = getVaultSync(); if(!done && vault.length === 0) { var el = document.getElementById('onboarding-overlay'); if(el) { el.style.display='flex'; renderWizardStep(); } } } /* Hook into Institution tab navigation */ (function(){ var origNav = window.nav; window.nav = function(id) { origNav && origNav(id); if(id === 'institutional') { setTimeout(maybeShowWizard, 300); } }; })();