Equity Screener & Research Desk

A desktop stock screener that collects market data with a real browser, stores it in a local database, ranks candidates, and records its research so a screen can be replayed later.

50,334lines of code
212files
12commits
7automated checks
12data models

What the measurements mean

Only what is unusual for this project. Every sentence names the field it came from; nothing here is asserted that cannot be checked against the data.

How it works

Screeners are easy to write and hard to trust. The data arrives from web pages that change, and a ranking is only as good as its inputs. So this one drives a real browser rather than relying on an API that may not exist. It refreshes selectively, fetching only missing metadata and updating only stale prices, so each run builds on the last instead of scraping everything again. Prices, metadata and detected events are kept in separate tables. Research experiments are stored as records too. That means a ranking can be revisited with the data as it was at the time, rather than as it is now.

What kind of engineering this is

Six signals counted from the source: files that run models locally, that act without being asked each time, that check their own output, that survive failure, that touch parsers and protocols, and that were measured then improved. Every axis carries its file count.

Depth profileDepth signals: Local inference 3 files, Autonomy 0 files, Verification 6 files, Resilience 27 files, Low level 6 files, Iteration 0 filesLocal inference3 filesAutonomy0 filesVerification6 filesResilience27 filesLow level6 filesIteration0 files

What it is written in

Share of code bytes. Vendored bundles and generated output are set aside before this is computed, which is why it differs from a simple file count.

Language mixHTML 97.5%, Python 2.5%HTML 97.5%

What stands out

Capabilities

Grade

Every check names the field it measured. Checks that cannot apply are excluded, never counted as failures.

C
74.3% over 19 of 19 checks100% coverage

Not met

Architecture

Directories carrying real modules, largest first.

Data model

Typed structures and tables found in the source.

Vulnerable dependencies

20 declared dependencies match a published advisory. Checked offline against the OSV database; only pinned versions can be checked, so anything unpinned here is unknown rather than clean.

Vocabulary

Parsed 18 of 19 Python file(s); the rest were over the size budget.

84functions
141methods
38classes
9documented modules

Classes

Functions

Command line

Depth

Signals counted from the code, not asserted.

12 commits across 6 separate working days over 1 months, 5 of them revising existing behaviour

Built from scratch

Proves itself

Survives failure

Local inference

Systems

Environment engineering

Working within limits

Languages

Built with

Recurring themes in the commit history

Evidence

Taken from the code itself: a module docstring or the opening of the README.

Standalone sentiment analysis runner. Runs in a separate process to avoid PyQt6 threading issues with Playwright. Playwright's sync_playwright() creates browser resources tied to the calling thread, which conflicts with Qt's thread management and causes segfaults. Usage: python sentiment_runner.py --input tickers.json --db market_data.db --output result.json The script: 1. Reads ticker list from i

At a glance

Status
paused
Primary language
HTML
First commit
2026-01-24
Last activity
2026-02-03
Domain
Automation & scraping
Agent docs
CLAUDE.md, AGENTS.md, .claude