CloverEye

CloverEye: scope for a desktop imageboard client

Rev 2 · 4 November 2026 · status: approved; all §11 decisions settled by the owner on 4 November 2026. Desktop first; the extension waits (D4).

A client for 4chan that reads boards and threads, watches threads, filters posts, posts replies, and has the Clip video tool built in. Its pitch, in one line: drop a video, and it comes out fitting the board you’re posting to. It ships as a desktop app (Linux, Windows, macOS) and as a browser extension.

It is not a Carino Systems product (§2). Clip itself stays a Files mode (~/Github/Files/docs/SCOPE-CLIP.md); this client reuses its pure parts.


1. Facts this scope rests on (checked 4 November 2026)

Fact Consequence
The read API (a.4cdn.org) only answers browser requests from boards.4chan.org (CORS). A request from any other origin gets access-control-allow-origin: http://boards.4chan.org. A hosted website can’t be the web version. It would need a proxy that relays 4chan’s content through a server we run. The web version is a browser extension running on boards.4chan.org (§5).
boards.json gives per-board max_filesize, max_webm_filesize, max_webm_duration, webm_audio, max_comment_chars, cooldowns, min_image_width/height, require_subject, ws_board, spoilers, math_tags, code_tags, user_ids, country_flags. E.g. /g/ 4 MB · 120 s · no sound; /wsg/ 6 MB · 400 s · sound; /gif/ 4 MB · 300 s · sound. Clip presets come live from the board, not from a hand-kept list. The post form can check every limit before upload.
The API sends Last-Modified and accepts If-Modified-Since; cache-control: max-age=5. Thread updates are conditional requests; most cost a 304.
One plain request to the image host (i.4cdn.org) got HTTP 429. 4chan’s edge rate-limits clients that don’t behave like a browser. The fetch layer must be conservative and look like a normal browser (§4.1). This is the biggest unknown and is tested first (C0).
4chan publishes API rules (github.com/4chan/4chan-API): at most 1 request per second, thread updates no more often than every 10 s, use If-Modified-Since. Built into the fetch layer as hard limits, not settings.

Not confirmed, to check in C0: which video codecs 4chan accepts in WebM (VP8/VP9 for sure; AV1 unknown), whether MP4 uploads are accepted, the maximum image dimensions (the community figure is 2048×2048, not in the API), and the current posting and captcha flow.

2. Why it’s separate from Carino Systems

So, like ButterEye: own repo, own name, own icon, not on the hub, no carino.systems domain, no Carino branding. Licence AGPL-3.0, matching Files, so Clip code moves between them freely (§11, D2).

3. Features

3.1 Read (C1)

3.1a Interface: modern, not a 2008 forum skin (C1)

The owner’s requirement is that the UI is modern. Concretely:

3.1b First-time setup (C0 builds it, C1 wires it)

Shown on first launch, before any request to the site. Full-window, one step per screen, a progress row on top, Back / Next / Skip setup on every step, keyboard-only works (Enter, Esc, arrows). Every answer is changeable later in Settings, and Settings → Run setup again reopens it.

  1. Welcome: what CloverEye is, and that it’s an unofficial client, not affiliated with or endorsed by 4chan. A link to the site’s rules. No network request has been made yet, and the screen says so.
  2. Look: theme (System / Dark / Light, the Classic and the Atrium variants), density (Comfortable / Compact), text size, previewed live on a sample thread built from local data.
  3. Boards: pick favourites from a grid (the board list is the first network request, made only when this step opens; if it fails, the step offers Retry or Skip, and favourites can be picked later).
  4. Video (Clip): checks ffmpeg and its encoders (libvpx-vp9, libsvtav1, libopus, libass, libplacebo) and shows a ✓/✗ row each. When something is missing, it shows the install command for this OS to copy. On Fedora it reads which package is installed (read-only rpm -q): Fedora’s ffmpeg-free first, then RPM Fusion’s ffmpeg, and the command fits that (install ffmpeg-free, or swap to RPM Fusion’s fuller build). The app never runs a package manager or asks for admin rights. Clip is disabled with a reason until the check passes; everything else works.
  5. Watching: notifications for replies to your posts (on/off; asks the OS for permission only if on), keep running in the tray when the window closes (on/off), and how often watched threads update (10 s minimum, the API rule).
  6. Files and privacy: download folder; “strip location and camera data from images before posting” (on by default); media cache in memory only (default) or a size-capped temp cache.
  7. Done: a summary of the choices with links to change each, then opens the first favourite board (or the board list).

Stored in the app’s settings DB with a setupVersion; a later release that adds a step shows only the new steps, not the whole flow.

3.2 Track (C2)

3.3 Post (C4)

3.4 Clip, built in (C3)

4. Desktop app

4.1 Architecture

4.3 Packaging (C6)

5. The web version: a browser extension

6. Not doing

7. Phases

Phase Delivers Done when
C0 · Gates First-time setup (§3.1b) and design tokens, runnable in a browser with a mock bridge; Tauri skeleton (compiles once webkit2gtk4.1-devel and gtk3-devel are installed); Rust fetch layer with limits; measure whether the image host still returns 429 to a polite client; WebM playback in WebKitGTK and WKWebView; confirm codecs/MP4/dimension limits by posting test files to a test board by hand; repo, name, licence A week of normal browsing with zero 429s, or a documented answer to the 429 problem
C1 · Read Design tokens + three-pane shell (§3.1a), command palette, boards, catalog, thread, media, gallery, keyboard Usable as a daily reader on Linux; UI checks in §3.1a pass
C2 · Track (You)s, watcher, notifications, filters Watcher survives a day open with no rate-limit hits
C3 · Clip ffmpeg engine, board-driven presets, Clip editor shared with Files Fixture suite (Clip §8): ≤ limit 100%, median ≥ 98%
C4 · Post Forms, captcha view, Pass, pre-flight checks, image cleaning Real posts on a test board from Linux, Windows (Wine) and macOS
C5 · Extension Chrome + Firefox extension from the same UI Store submission or release zip
C6 · Ship RPM, Windows installer, DMG, update channel Installs clean on a fresh VM per platform

Order with Files: Clip P0–P2 in Files go first. That builds fit.js, the editor and the WebCodecs engine. C0–C2 can run alongside, since they share no code with Clip. C3 then reuses the editor and adds the ffmpeg engine.

8. Risks

Risk Likelihood Answer
4chan’s edge blocks or rate-limits the desktop client Medium (seen once already) C0 gate; polite fetch layer; the extension path is immune because it runs in the real page
Posting or captcha flow changes and breaks posting High over time Posting runs inside an embedded 4chan page, so most changes don’t touch our code; keep the post code path small
Store rejects the extension Medium GitHub releases as the fallback
Illegal content in cache Low but serious §4.2: memory/temp-only cache, deleted-on-upstream-delete, no scraping
Trademark complaint Low No “4chan” in name or icon
Scope creep into a 4chan X clone High The Clip-to-post flow is the product; §3 is the whole v1 list

9. Tests

10. Reused from the fleet

11. Decisions (settled 4 November 2026)

# Question Decision
D1 Name CloverEye (repo and folder CloverEye)
D2 Licence AGPL-3.0, like Files
D3 Desktop stack Tauri 2
D4 Extension Desktop first; the extension (C5) only after C0–C4
D5 Apple Developer account Not now; unsigned macOS build
D6 NSFW boards Off by default, opt-in in Settings
D7 UI Modern, per §3.1a

Name note: “Clover” was also the name of a well-known open-source Android 4chan client (now discontinued, continued by forks), and the clover is 4chan’s logo motif. CloverEye is distinct enough as a name, but the icon should be an original mark (no four-leaf clover in 4chan’s green) to stay clear of their logo.