Terug naar portfolio

Case-study

ISKEAY

ISKEAY is mijn eigen OSINT-platform voor onderzoek in openbare bronnen. Het is geen simpele zoekmachine: de scan moet ook laten zien waar informatie vandaan komt, wat nog onzeker is en welke signalen elkaar tegenspreken.

59

tools voor openbare bronnen

36

extra adapters

FastAPI + Next.js

backend en frontend

Mistral

agent die tools kiest

Hoe ISKEAY is opgebouwd

agent, bewijslaag, bronchecks en dashboard

eigen project

planning

Agentlaag

Mistral AgentMemory taakwachtrij parallelle stappen

controle

Bewijslaag

Evidence Court confidence caps tegenstrijdigheden uitgeputte bronnen

voortgang

Werkqueue

GraphActionQueue lopende acties rate-limit herstel afrondchecks

dekking

Extra bronnen

36 adapters archieven web-identiteit ontwikkelgeschiedenis

mogelijkheden

Toolcatalogus

59 tools veilige terminal-fallback provider checks normalisatie

frontend

Dashboard

live status graph view bewijsdetails exports

Product flow

Van een losse aanwijzing naar een controleerbaar onderzoek.

Ik heb ISKEAY gebouwd rond een simpele regel: veel vinden is niet genoeg. Je moet ook kunnen uitleggen waarom iets relevant is, welke bronnen zijn gebruikt en waar de twijfel zit.

Input

Een onderzoek kan beginnen met iets kleins: een naam, username, mailadres, telefoonnummer, profiel-URL of afbeelding. Als de input te vaag is, kan de chat eerst doorvragen.

Live scan

Tijdens de scan zie je welke tools lopen, wat al gevonden is en waar de scan nog mee bezig is. Je hoeft dus niet te wachten op een zwart-wit eindrapport.

Rapport

Na afloop staat alles in duidelijke tabs: accounts, mogelijke matches, e-mails, identifiers, risico-signalen, timeline, graph, bewijs, open vragen en exports.

System map

Onder de UI draait een complete onderzoeksmachine.

De waarde zit vooral onder de oppervlakte: ISKEAY plant werk, bewaart bewijs, remt te snelle conclusies af en laat live zien welke onderdelen nog open staan.

stap 1

Input

Plan

naam, username, mail, telefoon, url of afbeelding

stap 2

Plan

Tools

de agent kiest uit bekende tools en houdt providerstatus bij

stap 3

Tools

Bewijs

bronnen, betrouwbaarheid en twijfel worden apart bewaard

stap 4

Bewijs

Dashboard

graph, open vragen, voortgang en exports blijven zichtbaar

Backend

FastAPI houdt de scan bij elkaar.

De backend combineert routes, job state, live status, vaste resultaatstructuren en exports. Aan de buitenkant is het modulair, maar de scan zelf blijft traceerbaar omdat state en resultaten centraal worden bijgehouden.

FastAPI als centrale backend

Search, assistant, ALLES, health, admin en cases hebben eigen routes, maar scanstatus, jobs en resultaten blijven op een vaste plek bij elkaar.

Een vast resultaatmodel

Welke route je ook gebruikt, de output wordt teruggebracht naar dezelfde structuur: accounts, e-mails, usernames, telefoons, domeinen, graph data, fases en bewijsstatus.

Async scans

Scans draaien als jobs. De UI krijgt live updates via SSE, kan terugvallen op polling en kan later exports maken zonder de hele trace onnodig groot op te slaan.

Persistence

SQLite is de standaard job store. Er is ook een MySQL-pad, plus aparte opslag voor graph data, bewijsregels en cases.

Agent engine

De agent kiest stappen, onthoudt context en wacht met conclusies.

Mistral function-calling

De agent krijgt een lijst met beschikbare tools en laat Mistral kiezen welke stap op dat moment logisch is.

AgentMemory

Memory bewaart wat al bekend is: entiteiten, accounts, bewijsregels, tegenstrijdigheden, timeline, pivots, geprobeerd inputmateriaal en graph data.

Taakplanning

Werk wordt verdeeld over snelle API-calls, web fetches, archieven, graph-taken en critic feedback. Checks voorkomen dat een scan te vroeg klaar wordt gemeld.

GraphActionQueue

Onderzoeksacties blijven traceerbaar met statussen zoals queued, running, succeeded, no-hit, failed en rate-limited.

Parallel werk

Onafhankelijke tool calls kunnen tegelijk draaien, met dedupe en limieten, zonder dat resultaten buiten de normale verwerking vallen.

Critic-laag

Een aparte supervisor kijkt naar de scanstatus en geeft gerichte vervolgacties terug, maar voert zelf geen tools uit.

Evidence

Een hoge score telt pas als het bewijs klopt.

De sterkste technische keuze is dat onzekerheid zichtbaar blijft. Ruwe hits, no-hits, tegenstrijdigheden en ontbrekende bronnen krijgen allemaal een plek in het model.

Evidence Court

Een score krijgt een plafond als bewijs zwak, tegenstrijdig of niet onafhankelijk genoeg is. Veel ruwe hits worden dus niet automatisch zekerheid.

Tegenstrijdigheden

Conflicterende signalen worden zichtbaar gemaakt in plaats van weggemiddeld. De UI kan ernst, bewijs en aanbevolen vervolgacties tonen.

StopPolicy

Afronden wordt geblokkeerd als belangrijke acties, bronnen, tegenstrijdigheden of expliciete anchors nog open staan.

Extra checks

False-positive review, negative evidence, temporal footprint, media provenance, query generation en pivot budgeting helpen om minder snel te veel te concluderen.

Tools

59 tools, maar niet als losse trucjes.

De tools zitten achter een registry, hebben duidelijke schemas en worden genormaliseerd voordat ze in het rapport komen. Sommige werken alleen als de juiste provider keys, lokale services of veiligheidschecks klaarstaan.

Dorking en search

Gerichte zoekqueries via lokale en optionele providers, met extractie van URLs, snippets, usernames, e-mails, telefoons en domeinen.

google_dork serper_dork SearXNG Google CSE Brave Serper

Username en account discovery

Brede username coverage en directe platformchecks, met expliciete waarschuwing dat raw account hits verificatie nodig hebben.

username_scan username_intel verify_account Maigret Sherlock

Externe runners

Wrappers rond externe OSINT runners en CLIs. Output wordt genormaliseerd, gereduceerd en waar nodig geredact.

external_osint_intel social_analyzer ignorant Blackbird UserFinder Socialscan Naminter h8mail Mosint git2mail Telepathy

Profiel en context

Publieke profielpagina's en expliciete websites worden gescrapet voor links, bio, contactpunten, context en vervolgankers.

profile_scraper scrape_account_context crawl_website

Social graph en posts

Publieke activiteit, posts, mentions, links en gerelateerde profielen worden gebruikt als context, niet als harde identiteit zonder corroboratie.

social_intel social_posts_intel account_activity_intel

Analyse zonder nieuwe bronnen

Analyse-tools voegen geen nieuwe externe data toe, maar wegen bestaande findings, patronen, correlaties en confidence.

analyze_patterns pattern_intel get_confidence

E-mail en identiteit

E-mail discovery, MX/SMTP-achtige checks, Holehe, Gravatar, EmailRep, Hunter en GHunt-achtige verrijking wanneer providers zijn geconfigureerd.

email_discovery email_validation gravatar_check ghunt_intel Holehe EmailRep Hunter

Telefoon

Telefoonnummers worden geparsed en verrijkt met regio, carrier, type en optionele PhoneInfoga of NumVerify signalen.

phone_intel PhoneInfoga NumVerify phonenumbers

Breach, paste, dark web en leaks

Exposure-lanes zoeken publieke breach, paste, stealer, dark-web index en high-noise leak signalen die altijd geverifieerd moeten worden voordat ze als zekerheid worden beschouwd.

breach_intel paste_intel darkweb_intel stealer_intel leaked_content_intel

Domeinen en organisaties

Passieve domain, DNS, certificate, ASN, archive, registry en corporate intelligence voor scoped domeinen, organisaties en publieke records.

external_search_intel spiderfoot_intel network_intel attack_surface_intel cert_intel whois_intel asn_intel archive_intel github_intel knowledge_intel corporate_intel kvk_intel companies_house_intel edgar_intel

Image en metadata

Afbeeldingen en bestanden kunnen worden onderzocht via perceptual hashes, EXIF/OCR/GPS metadata en optionele reverse-image providers.

image_intel metadata_intel ExifTool Tesseract TinEye Bing Visual

Platformactiviteit

Platform-specifieke publieke activity tools halen alleen beschikbare publieke metadata op en blijven gevoelig voor platformwijzigingen.

youtube_activity_intel reddit_activity_intel twitter_activity_intel tiktok_activity_intel instagram_activity_intel bluesky_activity_intel mastodon_activity_intel facebook_activity_intel linkedin_activity_intel twitch_activity_intel pinterest_activity_intel snapchat_activity_intel telegram_intel discord_intel

Veilige terminal-fallback

Een allowlisted terminal executor kan bekende CLIs draaien, met private-host protections en zonder ongecontroleerde shell-toegang.

run_terminal_tool Maigret CLI Sherlock CLI theHarvester curl/wget guards yt-dlp gallery-dl

Extra bronnen

36 adapters voor bronnen die anders blijven liggen.

Deze laag vervangt de core tools niet. Hij vult gaten met publieke datasets, webstandaarden, archieven, developer-ecosystemen, metadata en identity hints. Een deel is bewust opt-in of alleen geschikt voor self-audit.

katanabrowsertrixarchiveboxgauwaymorewaybackurlsurlfinderhttpxtrafilaturaextructmf2pyfeedparserlinkfinderxnlinkfindercariddiyt_dlpgallery_dlgh_archivesoftware_heritageecosystemsdeps_devlibraries_iocheck_if_email_existsopenpgp_keyskeybasewebfingerrel_melibravatarunavataropenalexorcidcrossrefwikidataopensanctionsminetsubfinder

ALLES

Naast de agent is er ook een brede scanroute.

ALLES is de oudere, brede achtergrondpipeline. Hij doorloopt meerdere fasen en brengt de resultaten daarna terug naar dezelfde structuur. Niet de enige route in ISKEAY, maar wel belangrijk voor de breedte van het project.

01 Dorking
02 Maigret username enrichment
03 Email discovery
04 Email validation en Holehe
05 Scraping
06 Image intelligence
07 Breach checks
08 Dark-web index checks
09 Network intelligence
10 Phone intelligence
11 Knowledge intelligence
12 Scoring
13 Report normalization

Frontend

De UI laat zien wat er tijdens de scan gebeurt.

Chat als startpunt

De UI bewaart sessie, berichten en search id lokaal. Je kunt tekst, profieldata, URLs en afbeeldingen meegeven en daarna live meekijken.

Live dashboard

SSE streaming met fallback polling toont voortgang, actieve taken, tool calls, extra bronchecks, critic feedback, memory snapshot en fouten tijdens de scan.

Graph view

Cytoscape toont nodes, filters, layouts, opgeslagen posities, selectie-acties, analyst flags, notes en PNG/JSON exports.

Bewijsdetails

Bewijsregels kunnen bron-URL, redirect chain, hash, excerpt, betrouwbaarheid en raw properties tonen zonder de context te verbergen.

Safety

Publieke bronnen, duidelijke grenzen.

Deze case-study publiceert geen echte scanresultaten en zet ISKEAY niet neer als surveillanceproduct. Het project hoort bij legaal, afgesproken en proportioneel onderzoek in openbare bronnen.

De code is te bekijken, maar niet bedoeld als vrij te misbruiken surveillance-tool.

De juiste use-case is legaal, afgesproken en proportioneel onderzoek in openbare bronnen.

Deze portfolio bevat geen echte scan-output, secrets of gevoelige persoonsgegevens.

Resultaten hangen af van lokale services, API keys, quota en veranderingen op platformen.

Platform scraping kan weinig opleveren door loginmuren, rate limits of anti-scrape maatregelen.

Leak-, adult- en dark-web signalen zijn ruisgevoelig en worden niet automatisch vertrouwd.

Sommige adapters zijn bewust opt-in, handmatig, kandidaat of alleen bedoeld voor self-audit.

Wat dit bewijst

Wat dit project over mijn manier van bouwen laat zien.

Een backend die langlopende scans, live updates, status polling en exports bij elkaar houdt.

Een frontend die niet alleen resultaten toont, maar ook voortgang, graph data en bewijsdetails begrijpelijk maakt.

Een agentlaag met tool schemas, memory, scheduling, graph actions, critic feedback en afrondchecks.

Een bewijsmodel dat bronnen, twijfel, tegenstrijdigheden en confidence caps serieus neemt.

Provider hygiene: configuratiechecks, ontbrekende dependencies, rate limits en guarded terminal execution.

Bewuste veiligheidskeuzes: geen echte persoonsdata in de portfolio en geen claims die de techniek niet kan dragen.