Report-it Kenya | Safe Reporting Platform :root, [data-theme=”light”] { –text-xs: clamp(0.75rem, 0.7rem + 0.25vw, 0.875rem); –text-sm: clamp(0.875rem, 0.8rem + 0.35vw, 1rem); –text-base: clamp(1rem, 0.95rem + 0.25vw, 1.125rem); –text-lg: clamp(1.125rem, 1rem + 0.75vw, 1.5rem); –text-xl: clamp(1.5rem, 1.2rem + 1.25vw, 2.25rem); –text-2xl: clamp(2.3rem, 1.4rem + 3vw, 4.5rem); –space-1: 0.25rem; –space-2: 0.5rem; –space-3: 0.75rem; –space-4: 1rem; –space-5: 1.25rem; –space-6: 1.5rem; –space-8: 2rem; –space-10: 2.5rem; –space-12: 3rem; –space-16: 4rem; –space-20: 5rem; –space-24: 6rem; –radius-sm: 0.375rem; –radius-md: 0.75rem; –radius-lg: 1.25rem; –radius-xl: 1.75rem; –color-bg: #f7f6f2; –color-surface: #f9f8f5; –color-surface-2: #ffffff; –color-surface-offset: #edeae5; –color-border: rgba(40, 37, 29, 0.11); –color-divider: rgba(40, 37, 29, 0.08); –color-text: #28251d; –color-text-muted: #67655f; –color-text-faint: #8b8982; –color-text-inverse: #f9f8f4; –color-primary: #0d5c63; –color-primary-hover: #09474c; –color-accent: #c68a2f; –color-danger: #8f2f4e; –shadow-sm: 0 1px 2px rgba(32, 28, 20, 0.06); –shadow-md: 0 10px 30px rgba(32, 28, 20, 0.08); –shadow-lg: 0 18px 48px rgba(32, 28, 20, 0.12); –content-default: 1120px; –font-display: ‘Instrument Serif’, Georgia, serif; –font-body: ‘Inter’, Arial, sans-serif; –transition: 180ms cubic-bezier(0.16, 1, 0.3, 1); } [data-theme=”dark”] { –color-bg: #171614; –color-surface: #1c1b19; –color-surface-2: #22211f; –color-surface-offset: #2a2927; –color-border: rgba(238, 236, 231, 0.12); –color-divider: rgba(238, 236, 231, 0.09); –color-text: #e8e5de; –color-text-muted: #beb9af; –color-text-faint: #938f87; –color-text-inverse: #171614; –color-primary: #64a4ab; –color-primary-hover: #8dbcc1; –color-accent: #d3a85e; –color-danger: #d46a91; –shadow-sm: 0 1px 2px rgba(0,0,0,0.2); –shadow-md: 0 10px 30px rgba(0,0,0,0.28); –shadow-lg: 0 18px 48px rgba(0,0,0,0.35); } *, *::before, *::after { box-sizing: border-box; } html { scroll-behavior: smooth; } body { margin: 0; min-height: 100vh; font-family: var(–font-body); font-size: var(–text-base); line-height: 1.6; background: var(–color-bg); color: var(–color-text); text-rendering: optimizeLegibility; } img, svg { display: block; max-width: 100%; } a { color: inherit; text-decoration: none; } button, input, textarea, select { font: inherit; } .skip-link { position: absolute; left: var(–space-4); top: -3rem; background: var(–color-primary); color: var(–color-text-inverse); padding: var(–space-3) var(–space-4); border-radius: var(–radius-sm); z-index: 100; } .skip-link:focus { top: var(–space-4); } .container { width: min(calc(100% – 2rem), var(–content-default)); margin-inline: auto; } .section { padding-block: clamp(var(–space-12), 8vw, var(–space-24)); } .eyebrow { display: inline-flex; align-items: center; gap: var(–space-2); font-size: var(–text-xs); text-transform: uppercase; letter-spacing: 0.14em; color: var(–color-text-muted); font-weight: 700; } .eyebrow::before { content: “”; width: 2.4rem; height: 1px; background: currentColor; opacity: 0.5; } .site-header { position: sticky; top: 0; z-index: 50; backdrop-filter: blur(18px); background: color-mix(in srgb, var(–color-bg) 88%, transparent); border-bottom: 1px solid var(–color-divider); } .header-row { display: flex; align-items: center; justify-content: space-between; gap: var(–space-4); padding: 0.9rem 0; } .brand { display: inline-flex; align-items: center; gap: var(–space-3); font-weight: 700; letter-spacing: -0.02em; } .brand-mark { width: 2.4rem; height: 2.4rem; border-radius: 0.8rem; background: linear-gradient(145deg, var(–color-primary), color-mix(in srgb, var(–color-primary) 55%, var(–color-accent))); color: white; display: grid; place-items: center; box-shadow: var(–shadow-sm); } .brand-mark svg { width: 1.25rem; height: 1.25rem; } .nav { display: flex; align-items: center; gap: var(–space-5); font-size: var(–text-sm); color: var(–color-text-muted); } .nav a:hover, .nav a:focus-visible { color: var(–color-text); } .header-actions { display: flex; align-items: center; gap: var(–space-3); } .theme-toggle, .menu-toggle { min-width: 44px; min-height: 44px; border-radius: 999px; border: 1px solid var(–color-border); background: var(–color-surface-2); color: var(–color-text); display: grid; place-items: center; cursor: pointer; transition: transform var(–transition), border-color var(–transition), background var(–transition); } .theme-toggle:hover, .menu-toggle:hover { transform: translateY(-1px); } .menu-toggle { display: none; } .btn { display: inline-flex; align-items: center; justify-content: center; gap: 0.6rem; min-height: 46px; padding: 0.9rem 1.2rem; border-radius: 999px; border: 1px solid transparent; font-size: var(–text-sm); font-weight: 700; transition: transform var(–transition), background var(–transition), color var(–transition), border-color var(–transition), box-shadow var(–transition); cursor: pointer; } .btn:hover { transform: translateY(-1px); } .btn-primary { background: var(–color-primary); color: var(–color-text-inverse); box-shadow: var(–shadow-sm); } .btn-primary:hover { background: var(–color-primary-hover); } .btn-secondary { background: transparent; color: var(–color-text); border-color: var(–color-border); } .hero { padding-top: clamp(var(–space-12), 6vw, var(–space-20)); padding-bottom: var(–space-16); } .hero-grid { display: grid; grid-template-columns: 1.1fr 0.9fr; gap: clamp(var(–space-8), 4vw, var(–space-16)); align-items: start; } .hero-copy h1 { margin: var(–space-5) 0 var(–space-5); font-family: var(–font-display); font-size: var(–text-2xl); line-height: 0.96; letter-spacing: -0.035em; max-width: 12ch; } .hero-copy p { margin: 0 0 var(–space-6); max-width: 62ch; color: var(–color-text-muted); } .hero-actions { display: flex; flex-wrap: wrap; gap: var(–space-3); margin-bottom: var(–space-8); } .signal-row { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: var(–space-4); padding-top: var(–space-6); border-top: 1px solid var(–color-divider); } .signal strong { display: block; font-size: var(–text-lg); line-height: 1.1; margin-bottom: 0.2rem; } .signal span { color: var(–color-text-muted); font-size: var(–text-sm); } .hero-panel { position: relative; background: linear-gradient(180deg, color-mix(in srgb, var(–color-surface-2) 78%, transparent), var(–color-surface)); border: 1px solid var(–color-border); border-radius: var(–radius-xl); padding: var(–space-6); box-shadow: var(–shadow-lg); overflow: hidden; } .hero-panel::before { content: “”; position: absolute; inset: auto -10% 70% 45%; height: 14rem; background: radial-gradient(circle, color-mix(in srgb, var(–color-primary) 18%, transparent), transparent 65%); pointer-events: none; } .mock-window { border-radius: var(–radius-lg); overflow: hidden; border: 1px solid var(–color-border); background: var(–color-surface-2); } .mock-top { display: flex; align-items: center; gap: 0.45rem; padding: 0.8rem 1rem; border-bottom: 1px solid var(–color-divider); background: var(–color-surface); } .dot { width: 0.65rem; height: 0.65rem; border-radius: 999px; background: var(–color-surface-offset); } .mock-body { display: grid; gap: var(–space-4); padding: var(–space-5); } .mock-card, .step, .info-card, .faq-item, .form-shell, .cta-strip { background: var(–color-surface); border: 1px solid var(–color-border); border-radius: var(–radius-lg); } .mock-card { padding: var(–space-4); } .mock-card h3, .info-card h3, .step h3, .section-title { margin: 0 0 var(–space-3); } .pill { display: inline-flex; align-items: center; gap: 0.5rem; font-size: var(–text-xs); font-weight: 700; letter-spacing: 0.08em; text-transform: uppercase; color: var(–color-primary); background: color-mix(in srgb, var(–color-primary) 10%, var(–color-surface-2)); padding: 0.45rem 0.7rem; border-radius: 999px; margin-bottom: var(–space-3); } .stack { display: grid; gap: var(–space-4); } .section-head { display: flex; justify-content: space-between; align-items: end; gap: var(–space-5); margin-bottom: var(–space-8); } .section-head p { max-width: 56ch; color: var(–color-text-muted); margin: 0; } h2.section-title { font-size: var(–text-xl); line-height: 1.05; font-family: var(–font-display); letter-spacing: -0.03em; } .grid-3 { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: var(–space-5); } .info-card { padding: var(–space-5); box-shadow: var(–shadow-sm); min-height: 100%; } .info-card p, .step p, .faq-item p, .form-shell p { color: var(–color-text-muted); } .icon-chip { width: 3rem; height: 3rem; border-radius: 1rem; display: grid; place-items: center; background: color-mix(in srgb, var(–color-primary) 12%, var(–color-surface-2)); color: var(–color-primary); margin-bottom: var(–space-4); } .process { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: var(–space-5); } .step { padding: var(–space-5); position: relative; overflow: hidden; } .step-number { font-size: var(–text-xs); font-weight: 800; letter-spacing: 0.12em; text-transform: uppercase; color: var(–color-accent); margin-bottom: var(–space-4); display: inline-block; } .band { background: var(–color-surface); border-block: 1px solid var(–color-divider); } .split { display: grid; grid-template-columns: 0.95fr 1.05fr; gap: var(–space-6); align-items: start; } .bullet-list { display: grid; gap: var(–space-4); margin: 0; padding: 0; list-style: none; } .bullet-list li { padding: 0 0 var(–space-4); border-bottom: 1px solid var(–color-divider); } .bullet-list li:last-child { border-bottom: 0; padding-bottom: 0; } .bullet-list strong { display: block; margin-bottom: 0.2rem; } .form-shell { padding: var(–space-5); box-shadow: var(–shadow-md); } .demo-form { display: grid; gap: var(–space-4); margin-top: var(–space-4); } .field { display: grid; gap: 0.45rem; } .field label { font-size: var(–text-xs); text-transform: uppercase; letter-spacing: 0.08em; font-weight: 700; color: var(–color-text-muted); } .field input, .field select, .field textarea { width: 100%; border-radius: 1rem; border: 1px solid var(–color-border); background: var(–color-surface-2); color: var(–color-text); padding: 0.95rem 1rem; outline: none; } .field textarea { min-height: 160px; resize: vertical; } .field input:focus, .field select:focus, .field textarea:focus { border-color: color-mix(in srgb, var(–color-primary) 60%, var(–color-border)); box-shadow: 0 0 0 4px color-mix(in srgb, var(–color-primary) 14%, transparent); } .field-row { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: var(–space-4); } .notice { padding: var(–space-4); border-radius: 1rem; background: color-mix(in srgb, var(–color-accent) 10%, var(–color-surface-2)); border: 1px solid color-mix(in srgb, var(–color-accent) 24%, var(–color-border)); font-size: var(–text-sm); } .faq-grid { display: grid; gap: var(–space-4); } .faq-item { padding: var(–space-5); } .cta-strip { padding: clamp(var(–space-6), 4vw, var(–space-10)); display: flex; justify-content: space-between; gap: var(–space-5); align-items: center; background: linear-gradient(135deg, color-mix(in srgb, var(–color-primary) 9%, var(–color-surface)), var(–color-surface)); box-shadow: var(–shadow-md); } .site-footer { padding: var(–space-8) 0 var(–space-12); color: var(–color-text-muted); font-size: var(–text-sm); } .footer-grid { display: flex; justify-content: space-between; gap: var(–space-4); padding-top: var(–space-6); border-top: 1px solid var(–color-divider); flex-wrap: wrap; } .fade-up { opacity: 0; transform: translateY(18px); transition: opacity 700ms cubic-bezier(0.16,1,0.3,1), transform 700ms cubic-bezier(0.16,1,0.3,1); } .fade-up.in-view { opacity: 1; transform: translateY(0); } @media (max-width: 980px) { .hero-grid, .split, .grid-3, .process { grid-template-columns: 1fr; } .section-head, .cta-strip, .footer-grid { flex-direction: column; align-items: flex-start; } .nav { position: absolute; top: calc(100% + 0.5rem); left: 1rem; right: 1rem; display: none; flex-direction: column; align-items: flex-start; padding: var(–space-4); background: var(–color-surface-2); border: 1px solid var(–color-border); border-radius: var(–radius-lg); box-shadow: var(–shadow-lg); } .nav.open { display: flex; } .menu-toggle { display: grid; } .header-actions .btn-secondary { display: none; } } @media (max-width: 720px) { .field-row, .signal-row { grid-template-columns: 1fr; } .hero-copy h1 { max-width: 10ch; } } @media (prefers-reduced-motion: reduce) { html { scroll-behavior: auto; } *, *::before, *::after { animation: none !important; transition: none !important; } .fade-up { opacity: 1; transform: none; } }
Secure public-interest reporting

Report concerns clearly, safely, and without confusion.

Use this website to receive reports about corruption, misconduct, abuse, fraud, unsafe practices, or other serious concerns. The page is written to help people understand what they can report, how information is handled, and what happens next.

Anonymous option People can submit without adding contact details.
Clear review path Set expectations for screening, escalation, and follow-up.
Mobile friendly Designed for fast use on phones, tablets, and desktops.
Purpose

A reporting page built for trust, not noise.

The design avoids sensational language and focuses on clarity. Visitors should immediately understand whether this platform fits their concern, what information is useful, and how their submission will be treated.

Safe framing

Tell users what this channel is for, what it is not for, and when emergency matters should go elsewhere.

Useful detail

Guide people to provide dates, locations, names, attachments, and a concise narrative that can actually be reviewed.

Privacy clarity

Be explicit about optional contact details, retention periods, review teams, and any limits to confidentiality.

Process

How reporting works on the site.

These steps can remain as page content even after you connect a real form plugin. They help reduce uncertainty and improve the quality of submissions.

Step 01

Prepare the facts

Ask the reporter to describe the event plainly, including date, location, institution, people involved, and available evidence.

Step 02

Choose anonymity

Let the person decide whether to stay anonymous or provide an email/phone number for updates.

Step 03

Review and next action

Explain that submissions are screened, acknowledged where possible, and referred internally according to policy.

Submission page

Paste your live form here, or use this layout as the page shell.

This section is intentionally ready for a WordPress Custom HTML block or a page-builder embed. You can keep the explanatory text on the left and replace the right-hand demo form with WPForms, Gravity Forms, Contact Form 7, or another secure reporting form.

  • Suggested categories. Corruption, fraud, abuse, safeguarding, harassment, safety, procurement irregularity, academic misconduct, cyber issue, other concern.
  • Essential fields. Category, summary, full description, date, location, people involved, attachments, and optional contact details.
  • Important warning. If anonymity matters, tell users not to identify themselves inside the free-text area or uploaded files.
Demo layout

Make a report

Replace this sample with your real plugin shortcode or embed code.

This channel is for non-emergency reporting. If there is immediate danger, contact the relevant emergency service or competent authority directly.
Report category Corruption or bribery Fraud or theft Abuse or harassment Safety concern Other issue
County or location
Short summary
Description
Incident date
Optional contact
Privacy

Plain-language privacy and handling statements.

This content is drafted so you can adapt it for your final legal and administrative process. Review it before publishing and align it with your actual reporting workflow.

What we collect

Information submitted through the form may include the details of the incident, supporting documents, optional contact information, and technical data needed to operate the website securely.

Why we collect it

We use submitted information to assess reported concerns, determine whether further review is needed, and manage follow-up where the reporter has chosen to provide contact details.

Limits to confidentiality

Information may be shared internally with authorised reviewers and, where required by law or policy, with competent authorities. State these limits clearly in your final live version.

Questions

Frequently asked questions.

These are useful on launch because they reduce hesitation and answer the concerns most users have before using a reporting channel.

Can someone report anonymously?

Yes. The page is written to support anonymous reporting. If anonymity is important, avoid typing your identity into the narrative field or uploading files that reveal it.

Will every report receive a reply?

Only promise replies where your operational process can support them. If no contact details are provided, you may not be able to respond directly.

What should not be submitted here?

Do not use this page for emergencies, urgent medical matters, or situations where immediate law-enforcement or emergency response is needed.

Ready to publish

Use this page as your full landing page or split it into Home, Report, Privacy, and FAQ.

Go to report section
(function () { const root = document.documentElement; const themeButton = document.querySelector(‘[data-theme-toggle]’); const menuButton = document.querySelector(‘.menu-toggle’); const nav = document.getElementById(‘site-nav’); let theme = window.matchMedia(‘(prefers-color-scheme: dark)’).matches ? ‘dark’ : ‘light’; root.setAttribute(‘data-theme’, theme); const renderThemeIcon = () => { themeButton.innerHTML = theme === ‘dark’ ? ” : ”; themeButton.setAttribute(‘aria-label’, theme === ‘dark’ ? ‘Switch to light mode’ : ‘Switch to dark mode’); }; renderThemeIcon(); themeButton.addEventListener(‘click’, function () { theme = theme === ‘dark’ ? ‘light’ : ‘dark’; root.setAttribute(‘data-theme’, theme); renderThemeIcon(); }); if (menuButton && nav) { menuButton.addEventListener(‘click’, function () { const open = nav.classList.toggle(‘open’); menuButton.setAttribute(‘aria-expanded’, String(open)); }); nav.querySelectorAll(‘a’).forEach(link => link.addEventListener(‘click’, () => { nav.classList.remove(‘open’); menuButton.setAttribute(‘aria-expanded’, ‘false’); })); } document.getElementById(‘year’).textContent = new Date().getFullYear(); const observer = new IntersectionObserver((entries) => { entries.forEach(entry => { if (entry.isIntersecting) { entry.target.classList.add(‘in-view’); observer.unobserve(entry.target); } }); }, { threshold: 0.15 }); document.querySelectorAll(‘.fade-up’).forEach(el => observer.observe(el)); })();

latest posts

categories

subscribe to my blog