You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
A Laravel web application for crawling, archiving, and browsing Dutch forum sites. Built around a queue-based pipeline that scrapes pages, extracts reader-friendly content, and caches assets for offline viewing.
Features
Multi-site management — add any number of seed URLs; each site is crawled independently
Crawl pipeline — shallow one-level scan or recursive full spider
Page archive — fetches HTML, stores compressed (gzip + base64) in the database
Reader extraction — strips nav, ads, and sidebars to produce a clean reading view
Asset snapshots — inlines CSS and images as data URIs for fully offline pages (CSS-only, popular-images, or full modes)
Thread reconstruction — detects paginated forum threads; CSS selector wizard with live iframe preview
Link graph — extracts page-to-page links; vis.js force-directed graph + popular pages ranking
Exports — single-page HTML download; EPUB 3 export for threads
Setup wizard — guided scan → plan → archive flow when adding a new site
Light/dark mode — toggle persisted in localStorage
Compression stats — DB and disk usage per site card
Add a site — paste a seed URL; redirected to the setup wizard which auto-starts a shallow scan
Wizard — watch URLs being discovered, then choose archive mode (Reader / CSS snapshot / Full) and optionally filter by path prefix, then start importing
Enrich (optional, from the advanced panel on the Sites page):
Reader view — extract main content, strip chrome
Extract links — build the page link graph
Snapshot — inline CSS (and optionally images) for offline rendering
Detect threads — groups paginated URLs into multi-page threads
Thread wizard
Open Thread wizard from a site's advanced panel to configure CSS selectors for post extraction. Type a selector in the left panel and the right iframe updates live with highlighted matches.
Browsing
Browse — full-text search across all archived pages; availability dots indicate reader/snapshot status per row; relative timestamps with absolute tooltip
Tree — navigate the URL hierarchy with per-node import actions
Popular — pages ranked by inbound link count
Graph — vis.js force-directed link network
Threads — stitched multi-page thread view with per-post cards
Queue — live view of running, waiting, and failed jobs (also reachable via the header badge)
Architecture
Job pipeline
Job
Purpose
ScanDomainJob
Seeds recursive crawl
ScanUrlJob
Recursive spider — dispatches itself for each new URL
ShallowScanJob
One-level link extraction (no recursion)
ResumeScanJob
Re-dispatches ScanUrlJob for all unimported URLs
ImportPagesJob
Fetches HTML, compresses, saves to pages; auto-runs reader extraction
ExtractReaderContentJob
Readability.php-based reader extraction (Mozilla Readability port); falls back to plain text
InlineAssetsJob
Fetches CSS/images, saves to disk, builds asset cache
ExtractLinksJob
Parses hrefs from all pages, populates page_links
DetectThreadsJob
Groups paginated URLs into threads records
ScanPdfLinksJob
Finds external .pdf links, exports CSV
Services
Class
Purpose
App\Services\Parser
cURL scraper — extracts links, images, title, meta tags