Darfin — AI-Powered Company Analysis Platform
Automated twice-daily DART filing analysis (06:00 / 18:00 KST)
Objective
Give retail investors a fast way to understand a KOSPI/KOSDAQ company's DART filings without reading full regulatory disclosures.
The Problem
DART filings are dense, released multiple times a day across hundreds of companies, and easy to misread — a materially important change can be buried in pages of boilerplate, with no easy way to see what actually changed since the last filing.
Approach
Built a Python pipeline that collects filings via the DART API, parses the XML, diffs each filing against the prior one, and pipes the meaningful deltas to Gemini for summarization and risk analysis. The pipeline runs twice daily via APScheduler, backed by an on-demand LLM worker queue for user-triggered lookups. A Spring Boot query API serves the analyzed data to a React frontend covering financial trends, risk signals, business segments, and shareholder status.
Challenges
- DART's XML schema varies across filing types, so the parser had to handle inconsistent/nested structures rather than a single fixed shape.
- Keeping twice-daily batch analysis and on-demand user requests both fast and within LLM cost/latency budgets meant designing a separate worker queue instead of calling Gemini synchronously everywhere.
- Diffing filings so the output surfaces meaningful changes instead of noisy formatting differences between versions.
What I Learned
- How to combine rule-based parsing with LLM reasoning instead of leaning on either alone — structured fields where the data is reliable, LLM summarization where it isn't.
- Running a scheduled batch pipeline and a live on-demand request path in the same system without them contending for resources.